אתם יכולים לאפשר למשתמשים שלכם לבצע אימות באמצעות Firebase באמצעות ספקי OAuth כמו Yahoo. לשם כך, אתם צריכים לשלב באפליקציה שלכם כניסה כללית באמצעות OAuth מבוססת-אינטרנט באמצעות Firebase SDK כדי לבצע את תהליך הכניסה מקצה לקצה. התהליך הזה מחייב שימוש בערכות ה-SDK של Firebase לטלפונים, ולכן הוא נתמך רק בפלטפורמות Android ו-Apple.
לפני שמתחילים
- איך מוסיפים את Firebase לפרויקט C++
- במסוף Firebase, עוברים אל Security (אבטחה) > Authentication (אימות).
- בכרטיסייה שיטת כניסה, מפעילים את ספק הכניסה Yahoo.
-
מוסיפים את מזהה הלקוח ואת סוד הלקוח ממסוף המפתחים של הספק להגדרות הספק:
-
כדי לרשום לקוח OAuth של Yahoo, פועלים לפי ההוראות בתיעוד למפתחים של Yahoo בנושא רישום אפליקציית אינטרנט ב-Yahoo.
חשוב לבחור את שתי הרשאות ה-API של OpenID Connect:
profileו-email. -
כשרושמים אפליקציות אצל הספקים האלה, חשוב לרשום את הדומיין
*.firebaseapp.comשל הפרויקט כדומיין ההפניה של האפליקציה.
-
- לוחצים על שמירה.
גישה לכיתה firebase::auth::Auth
המחלקות Auth הן שער לכל הקריאות ל-API.
- מוסיפים את קובצי הכותרות Auth ו-App:
#include "firebase/app.h" #include "firebase/auth.h"
- יוצרים מחלקה
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__)
- קבלת הכיתה
firebase::auth::Authל-firebase::App. יש מיפוי של אחד לאחד ביןAppלביןAuth.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
טיפול בתהליך הכניסה באמצעות Firebase SDK
כדי לטפל בתהליך הכניסה באמצעות Firebase SDK, פועלים לפי השלבים הבאים:
יוצרים מופע של
FederatedOAuthProviderDataשמוגדר עם מזהה הספק שמתאים ל-Yahoo.firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::YahooAuthProvider::kProviderId);אופציונלי: מציינים פרמטרים נוספים של 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.אופציונלי: מציינים היקפי הרשאות נוספים של OAuth 2.0 מעבר ל-
profileול-emailשרוצים לבקש מספק האימות. אם האפליקציה שלכם דורשת גישה לנתונים פרטיים של משתמשים מ-Yahoo APIs, תצטרכו לבקש הרשאות ל-Yahoo APIs בקטע API Permissions ב-Yahoo developer console. היקפי ה-OAuth המבוקשים צריכים להיות זהים להיקפים שהוגדרו מראש בהרשאות ה-API של האפליקציה. לדוגמה, אם נדרשת גישת קריאה/כתיבה לאנשי הקשר של המשתמש והיא מוגדרת מראש בהרשאות ה-API של האפליקציה, צריך להעביר אתsdct-wבמקום את היקף הגישה לקריאה בלבד של OAuthsdct-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.
אחרי שמגדירים את נתוני הספק, משתמשים בהם כדי ליצור FederatedOAuthProvider.
// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);מתבצע אימות באמצעות Firebase באמצעות אובייקט ספק האימות. שימו לב: בניגוד לפעולות אחרות של FirebaseAuth, הפעולה הזו תשתלט על ממשק המשתמש על ידי הצגת תצוגת אינטרנט שבה המשתמש יכול להזין את פרטי הכניסה שלו.
כדי להתחיל את תהליך הכניסה, קוראים לפונקציה
SignInWithProvider:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithProvider(provider_data);יכול להיות שהבקשה תמתין או תירשם כקריאה חוזרת ב-Future.
הדוגמאות שלמעלה מתמקדות בתהליכי כניסה, אבל אפשר גם לקשר ספק של Yahoo למשתמש קיים באמצעות
LinkWithProvider. לדוגמה, אתם יכולים לקשר כמה ספקים לאותו משתמש, כדי שהוא יוכל להיכנס לחשבון דרך כל אחד מהם.firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);אפשר להשתמש באותו דפוס עם
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();