אתה יכול לאפשר למשתמשים שלך לבצע אימות עם Firebase באמצעות ספקי OAuth כמו Yahoo על ידי שילוב OAuth Login גנרי מבוסס אינטרנט באפליקציה שלך באמצעות Firebase SDK כדי לבצע את זרימת הכניסה מקצה לקצה.
לפני שאתה מתחיל
כדי להיכנס למשתמשים באמצעות חשבונות Yahoo, תחילה עליך להפעיל את Yahoo כספק כניסה עבור פרויקט Firebase שלך:
- במסוף Firebase , פתח את הקטע Auth .
- בכרטיסייה שיטת כניסה , הפעל את ספק Yahoo .
- הוסף את מזהה הלקוח ואת סוד הלקוח ממסוף המפתחים של אותו ספק לתצורת הספק:
כדי לרשום לקוח Yahoo OAuth, עקוב אחר התיעוד למפתחים של Yahoo על רישום יישום אינטרנט עם Yahoo .
הקפד לבחור בשתי הרשאות OpenID Connect API:
profile
email
.- בעת רישום אפליקציות אצל ספקים אלה, הקפד לרשום את הדומיין
*.firebaseapp.com
עבור הפרויקט שלך כדומיין ההפניה מחדש עבור האפליקציה שלך.
- לחץ על שמור .
אם עדיין לא ציינת את טביעת האצבע SHA-1 של האפליקציה שלך, עשה זאת מדף ההגדרות של מסוף Firebase. עיין באימות הלקוח שלך לפרטים כיצד לקבל את טביעת האצבע SHA-1 של האפליקציה שלך.
טפל בזרימת הכניסה עם Firebase SDK
אם אתה בונה אפליקציית Android, הדרך הקלה ביותר לאמת את המשתמשים שלך עם Firebase באמצעות חשבונות Yahoo שלהם היא לטפל בכל זרימת הכניסה עם Firebase Android SDK.
כדי לטפל בזרימת הכניסה עם Firebase Android SDK, בצע את השלבים הבאים:
בנה מופע של OAuthProvider באמצעות ה-Builder שלו עם מזהה הספק yahoo.com .
Kotlin+KTX
val provider = OAuthProvider.newBuilder("yahoo.com")
Java
OAuthProvider.Builder provider = OAuthProvider.newBuilder("yahoo.com");
אופציונלי : ציין פרמטרים נוספים של OAuth מותאמים אישית שברצונך לשלוח עם בקשת ה-OAuth.
Kotlin+KTX
// Prompt user to re-authenticate to Yahoo. provider.addCustomParameter("prompt", "login") // Localize to French. provider.addCustomParameter("language", "fr")
Java
// Prompt user to re-authenticate to Yahoo. provider.addCustomParameter("prompt", "login"); // Localize to French. provider.addCustomParameter("language", "fr");
לפרמטרים שבהם Yahoo תומך, עיין בתיעוד Yahoo OAuth . שים לב שאינך יכול להעביר פרמטרים הנדרשים לפי Firebase עם
setCustomParameters()
. פרמטרים אלו הם client_id , redirect_uri , response_type , scope ו- state .אופציונלי : ציין היקפי OAuth 2.0 נוספים מעבר
profile
email
שברצונך לבקש מספק האימות. אם האפליקציה שלך דורשת גישה לנתוני משתמש פרטיים ממשקי API של Yahoo, תצטרך לבקש הרשאות לממשקי API של Yahoo תחת הרשאות API במסוף המפתחים של Yahoo. היקפי OAuth המבוקשים חייבים להיות התאמות מדויקות לאלו שהוגדרו מראש בהרשאות ה-API של האפליקציה. לדוגמה, אם מתבקשת גישת קריאה/כתיבה לאנשי קשר של משתמשים ומוגדרת מראש בהרשאות ה-API של האפליקציה, יש להעביר אתsdct-w
במקום את היקף OAuth לקריאה בלבדsdct-r
. אחרת, הזרימה תיכשל ותוצג שגיאה למשתמש הקצה.Kotlin+KTX
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. provider.scopes = listOf("mail-r", "sdct-w")
Java
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. List<String> scopes = new ArrayList<String>() { { // Request access to Yahoo Mail API. add("mail-r"); // This must be preconfigured in the app's API permissions. add("sdct-w"); } }; provider.setScopes(scopes);
למידע נוסף, עיין בתיעוד היקפים של Yahoo .בצע אימות עם Firebase באמצעות אובייקט ספק OAuth. שים לב שבניגוד לפעולות אחרות של FirebaseAuth, זה ישתלט על ממשק המשתמש שלך על ידי פתיחת כרטיסיית Chrome מותאמת אישית . כתוצאה מכך, אל תתייחס לפעילות שלך ב-OnSuccessListeners וב-OnFailureListeners שאתה מצרף מכיוון שהם יתנתקו מיד כאשר הפעולה תתחיל את ממשק המשתמש.
תחילה עליך לבדוק אם כבר קיבלת תשובה. כניסה באמצעות שיטה זו מציבה את הפעילות שלך ברקע, מה שאומר שניתן להחזיר אותה על ידי המערכת במהלך זרימת הכניסה. כדי לוודא שלא תגרום למשתמש לנסות שוב אם זה קורה, עליך לבדוק אם כבר קיימת תוצאה.
כדי לבדוק אם יש תוצאה ממתינה, התקשר ל-
getPendingAuthResult
:Kotlin+KTX
val pendingResultTask = firebaseAuth.pendingAuthResult if (pendingResultTask != null) { // There's something already here! Finish the sign-in for your user. pendingResultTask .addOnSuccessListener { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } .addOnFailureListener { // Handle failure. } } else { // There's no pending result so you need to start the sign-in flow. // See below. }
Java
Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult(); if (pendingResultTask != null) { // There's something already here! Finish the sign-in for your user. pendingResultTask .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } }); } else { // There's no pending result so you need to start the sign-in flow. // See below. }
כדי להתחיל את זרימת הכניסה, התקשר ל-
startActivityForSignInWithProvider
:Kotlin+KTX
firebaseAuth .startActivityForSignInWithProvider(activity, provider.build()) .addOnSuccessListener { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } .addOnFailureListener { // Handle failure. }
Java
firebaseAuth .startActivityForSignInWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
בסיום מוצלח, ניתן לאחזר את אסימון הגישה של OAuth המשויך לספק מאובייקט
OAuthCredential
שהוחזר.באמצעות אסימון הגישה של OAuth, אתה יכול לקרוא ל- Yahoo API .
כאשר
YAHOO_USER_UID
הוא המזהה של משתמש Yahoo שניתן לנתח מהשדהfirebaseAuth.getCurrentUser().getProviderData().get(0).getUid()
או מ-authResult.getAdditionalUserInfo().getProfile()
.בעוד שהדוגמאות לעיל מתמקדות בזרימות כניסה, יש לך גם את היכולת לקשר ספק Yahoo למשתמש קיים באמצעות
startActivityForLinkWithProvider
. לדוגמה, אתה יכול לקשר מספר ספקים לאותו משתמש ולאפשר להם להיכנס עם אחד מהם.Kotlin+KTX
// The user is already signed-in. val firebaseUser = firebaseAuth.currentUser!! firebaseUser .startActivityForLinkWithProvider(activity, provider.build()) .addOnSuccessListener { // Provider credential is linked to the current user. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). // The OAuth secret can be retrieved by calling: // authResult.getCredential().getSecret(). } .addOnFailureListener { // Handle failure. }
Java
// The user is already signed-in. FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); firebaseUser .startActivityForLinkWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // Provider credential is linked to the current user. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). // The OAuth secret can be retrieved by calling: // authResult.getCredential().getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
ניתן להשתמש באותה דפוס עם
startActivityForReauthenticateWithProvider
אשר ניתן להשתמש בו כדי לאחזר אישורים טריים עבור פעולות רגישות הדורשות כניסה אחרונה.Kotlin+KTX
// The user is already signed-in. val firebaseUser = firebaseAuth.currentUser!! firebaseUser .startActivityForReauthenticateWithProvider(activity, provider.build()) .addOnSuccessListener { // User is re-authenticated with fresh tokens and // should be able to perform sensitive operations // like account deletion and email or password // update. } .addOnFailureListener { // Handle failure. }
Java
// The user is already signed-in. FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); firebaseUser .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is re-authenticated with fresh tokens and // should be able to perform sensitive operations // like account deletion and email or password // update. } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
הצעדים הבאים
לאחר שמשתמש נכנס בפעם הראשונה, נוצר חשבון משתמש חדש ומקושר לאישורים - כלומר, שם המשתמש והסיסמה, מספר הטלפון או פרטי ספק האישורים - המשתמש נכנס איתו. החשבון החדש הזה מאוחסן כחלק מפרויקט Firebase שלך, וניתן להשתמש בו כדי לזהות משתמש בכל אפליקציה בפרויקט שלך, ללא קשר לאופן שבו המשתמש נכנס.
באפליקציות שלך, תוכל לקבל את פרטי הפרופיל הבסיסיים של המשתמש מאובייקט
FirebaseUser
. ראה ניהול משתמשים .בכללי האבטחה של מסד הנתונים בזמן אמת של Firebase ואחסון בענן , אתה יכול לקבל את מזהה המשתמש הייחודי של המשתמש המחובר ממשתנה
auth
, ולהשתמש בו כדי לשלוט לאילו נתונים המשתמש יכול לגשת.
אתה יכול לאפשר למשתמשים להיכנס לאפליקציה שלך באמצעות מספר ספקי אימות על ידי קישור אישורי ספק אימות לחשבון משתמש קיים.
כדי לצאת ממשתמש, התקשר ל- signOut
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();