אימות באמצעות Yahoo ו-C++

אתם יכולים לאפשר למשתמשים שלכם לבצע אימות באמצעות Firebase באמצעות ספקי OAuth כמו Yahoo. לשם כך, אתם צריכים לשלב באפליקציה שלכם כניסה כללית באמצעות OAuth מבוססת-אינטרנט באמצעות Firebase SDK כדי לבצע את תהליך הכניסה מקצה לקצה. התהליך הזה מחייב שימוש בערכות ה-SDK של Firebase לטלפונים, ולכן הוא נתמך רק בפלטפורמות Android ו-Apple.

לפני שמתחילים

  1. איך מוסיפים את Firebase לפרויקט C++‎
  2. במסוף Firebase, עוברים אל Security (אבטחה) > Authentication (אימות).
  3. בכרטיסייה שיטת כניסה, מפעילים את ספק הכניסה Yahoo.
  4. מוסיפים את מזהה הלקוח ואת סוד הלקוח ממסוף המפתחים של הספק להגדרות הספק:
    1. כדי לרשום לקוח OAuth של Yahoo, פועלים לפי ההוראות בתיעוד למפתחים של Yahoo בנושא רישום אפליקציית אינטרנט ב-Yahoo.

      חשוב לבחור את שתי הרשאות ה-API של OpenID Connect: profile ו-email.

    2. כשרושמים אפליקציות אצל הספקים האלה, חשוב לרשום את הדומיין *.firebaseapp.com של הפרויקט כדומיין ההפניה של האפליקציה.
  5. לוחצים על שמירה.

גישה לכיתה firebase::auth::Auth

המחלקות Auth הן שער לכל הקריאות ל-API.
  1. מוסיפים את קובצי הכותרות Auth ו-App:
    #include "firebase/app.h"
    #include "firebase/auth.h"
  2. יוצרים מחלקה firebase::App בקוד האתחול.
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
  3. קבלת הכיתה firebase::auth::Auth ל-firebase::App. יש מיפוי של אחד לאחד בין App לבין Auth.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);

טיפול בתהליך הכניסה באמצעות Firebase SDK

כדי לטפל בתהליך הכניסה באמצעות Firebase SDK, פועלים לפי השלבים הבאים:

  1. יוצרים מופע של FederatedOAuthProviderData שמוגדר עם מזהה הספק שמתאים ל-Yahoo.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::YahooAuthProvider::kProviderId);
    
  2. אופציונלי: מציינים פרמטרים נוספים של OAuth בהתאמה אישית שרוצים לשלוח עם בקשת ה-OAuth.

    // Prompt user to re-authenticate to Yahoo.
    provider_data.custom_parameters["prompt"] = "login";
    
    // Localize to French.
    provider_data.custom_parameters["language"] = "fr";
    

    למידע על הפרמטרים ש-Yahoo תומכת בהם, אפשר לעיין במסמכי התיעוד של Yahoo בנושא OAuth. הערה: אי אפשר להעביר פרמטרים שנדרשים על ידי Firebase באמצעות התג custom_parameters(). הפרמטרים האלה הם client_id,‏ redirect_uri, ‏ response_type, ‏ scope ו-state.

  3. אופציונלי: מציינים היקפי הרשאות נוספים של OAuth 2.0 מעבר ל-profile ול-email שרוצים לבקש מספק האימות. אם האפליקציה שלכם דורשת גישה לנתונים פרטיים של משתמשים מ-Yahoo APIs, תצטרכו לבקש הרשאות ל-Yahoo APIs בקטע API Permissions ב-Yahoo developer console. היקפי ה-OAuth המבוקשים צריכים להיות זהים להיקפים שהוגדרו מראש בהרשאות ה-API של האפליקציה. לדוגמה, אם נדרשת גישת קריאה/כתיבה לאנשי הקשר של המשתמש והיא מוגדרת מראש בהרשאות ה-API של האפליקציה, צריך להעביר את sdct-w במקום את היקף הגישה לקריאה בלבד של OAuth‏ sdct-r. אחרת,התהליך ייכשל ותוצג שגיאה למשתמש הקצה.

    // Request access to Yahoo Mail API.
    provider_data.scopes.push_back("mail-r");
    // This must be preconfigured in the app's API permissions.
    provider_data.scopes.push_back("sdct-w");
    

    מידע נוסף מופיע במאמרי העזרה בנושא היקפי הרשאות ב-Yahoo.

  4. אחרי שמגדירים את נתוני הספק, משתמשים בהם כדי ליצור FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. מתבצע אימות באמצעות Firebase באמצעות אובייקט ספק האימות. שימו לב: בניגוד לפעולות אחרות של FirebaseAuth, הפעולה הזו תשתלט על ממשק המשתמש על ידי הצגת תצוגת אינטרנט שבה המשתמש יכול להזין את פרטי הכניסה שלו.

    כדי להתחיל את תהליך הכניסה, קוראים לפונקציה SignInWithProvider:

    firebase::Future<firebase::auth::AuthResult> result =
      auth->SignInWithProvider(provider_data);
    

    יכול להיות שהבקשה תמתין או תירשם כקריאה חוזרת ב-Future.

  6. הדוגמאות שלמעלה מתמקדות בתהליכי כניסה, אבל אפשר גם לקשר ספק של Yahoo למשתמש קיים באמצעות LinkWithProvider. לדוגמה, אתם יכולים לקשר כמה ספקים לאותו משתמש, כדי שהוא יוכל להיכנס לחשבון דרך כל אחד מהם.

    firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
    
  7. אפשר להשתמש באותו דפוס עם ReauthenticateWithProvider כדי לאחזר פרטי כניסה עדכניים לפעולות רגישות שדורשות כניסה עדכנית.

    firebase::Future<firebase::auth::AuthResult> result =
      user.ReauthenticateWithProvider(provider_data);
    

    יכול להיות שהאפליקציה תמתין או תרשום קריאה חוזרת ב-Future.

השלבים הבאים

אחרי שמשתמש נכנס לחשבון בפעם הראשונה, נוצר חשבון משתמש חדש שמקושר לפרטי הכניסה – כלומר, שם המשתמש והסיסמה, מספר הטלפון או פרטי ספק האימות – שבאמצעותם המשתמש נכנס לחשבון. החשבון החדש הזה נשמר כחלק מפרויקט Firebase, ואפשר להשתמש בו כדי לזהות משתמש בכל האפליקציות בפרויקט, בלי קשר לשיטת הכניסה של המשתמש.

  • באפליקציות, אפשר לקבל את פרטי הפרופיל הבסיסיים של המשתמש מאובייקט firebase::auth::User:

    firebase::auth::User user = auth->current_user();
    if (user.is_valid()) {
      std::string name = user.display_name();
      std::string email = user.email();
      std::string photo_url = user.photo_url();
      // The user's ID, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server,
      // if you have one. Use firebase::auth::User::Token() instead.
      std::string uid = user.uid();
    }
  • ב-Firebase Realtime Database וב-Cloud Storage Security Rules, אפשר לקבל את מזהה המשתמש הייחודי של המשתמש המחובר מהמשתנה auth, ולהשתמש בו כדי לקבוע לאילו נתונים משתמש יכול לגשת.

אתם יכולים לאפשר למשתמשים להיכנס לאפליקציה שלכם באמצעות כמה ספקי אימות על ידי קישור פרטי כניסה של ספק אימות לחשבון משתמש קיים.

כדי להוציא משתמש מהחשבון, מתקשרים אל SignOut():

auth->SignOut();