Check out what’s new from Firebase at Google I/O 2022. Learn more

אימות באמצעות טוויטר בפלטפורמות של אפל

אתה יכול לאפשר למשתמשים שלך לבצע אימות עם Firebase באמצעות ספקי OAuth כמו Twitter על ידי שילוב OAuth Login גנרי באפליקציה שלך באמצעות Firebase SDK כדי לבצע את זרימת הכניסה מקצה לקצה.

לפני שאתה מתחיל

השתמש ב-Swift Package Manager כדי להתקין ולנהל תלות ב-Firebase.

  1. ב-Xcode, כשפרויקט האפליקציה שלך פתוח, נווט אל קובץ > הוסף חבילות .
  2. כאשר תתבקש, הוסף את מאגר Firebase Apple platforms SDK:
  3.   https://github.com/firebase/firebase-ios-sdk
      
  4. בחר את ספריית האימות של Firebase.
  5. בסיום, Xcode יתחיל באופן אוטומטי לפתור ולהוריד את התלות שלך ברקע.

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

  1. הוסף את Firebase לפרויקט Apple שלך .

  2. כלול את התרמילים הבאים ב- Podfile שלך:

    pod 'FirebaseAuth'
    
  3. במסוף Firebase , פתח את הקטע Auth .
  4. בכרטיסייה שיטת כניסה , הפעל את ספק טוויטר .
  5. הוסף את מפתח ה- API וסוד ה-API ממסוף המפתחים של אותו ספק לתצורת הספק:
    1. רשום את האפליקציה שלך כיישום מפתח בטוויטר וקבל את מפתח ה-OAuth API ואת סוד ה- API של האפליקציה שלך.
    2. ודא URI להפניה מחדש של Firebase OAuth שלך (למשל my-app-12345.firebaseapp.com/__/auth/handler ) מוגדר ככתובת ה- URL שלך להתקשרות חוזרת של הרשאה בדף ההגדרות של האפליקציה שלך בתצורה של אפליקציית Twitter שלך.
  6. לחץ על שמור .

טפל בזרימת הכניסה עם Firebase SDK

כדי לטפל בזרימת הכניסה עם Firebase Apple platforms SDK, בצע את השלבים הבאים:

  1. הוסף סכימות כתובת URL מותאמות אישית לפרויקט Xcode שלך:

    1. פתח את תצורת הפרויקט שלך: לחץ פעמיים על שם הפרויקט בתצוגת העץ השמאלית. בחר את האפליקציה שלך מהקטע ' יעדים ' ולאחר מכן בחר בכרטיסייה ' מידע ' והרחב את הקטע ' סוגי כתובות אתרים '.
    2. לחץ על הלחצן + והוסף סכימת URL עבור מזהה הלקוח ההפוך שלך. כדי למצוא ערך זה, פתח את קובץ התצורה GoogleService-Info.plist וחפש את מפתח REVERSED_CLIENT_ID . העתק את הערך של המפתח הזה והדבק אותו בתיבה סכימות URL בדף התצורה. השאר את השדות האחרים ריקים.

      לאחר השלמתו, התצורה שלך אמורה להיראות משהו דומה להלן (אבל עם הערכים הספציפיים ליישום שלך):

  2. צור מופע של OAuthProvider באמצעות מזהה הספק twitter.com .

    מָהִיר

        var provider = OAuthProvider(providerID: "twitter.com")
        

    Objective-C

        FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"twitter.com"];
        
  3. אופציונלי : ציין פרמטרים נוספים של OAuth מותאמים אישית שברצונך לשלוח עם בקשת ה-OAuth.

    מָהִיר

        provider.customParameters = [
          "lang": "fr"
          ]
        

    Objective-C

        [provider setCustomParameters:@{@"lang": @"fr"}];
        

    לפרמטרים שבהם Twitter תומך, עיין בתיעוד של Twitter OAuth . שים לב שאינך יכול להעביר פרמטרים הנדרשים לפי Firebase עם setCustomParameters . פרמטרים אלה הם client_id , redirect_uri , response_type , scope ו- state .

  4. אופציונלי : אם ברצונך להתאים אישית את האופן שבו האפליקציה שלך מציגה את SFSafariViewController או UIWebView בעת הצגת ה-reCAPTCHA למשתמש, צור מחלקה מותאמת אישית התואמת את פרוטוקול FIRAuthUIDelegate , והעביר אותו ל- getCredentialWithUIDelegate:completion: .

  5. בצע אימות עם Firebase באמצעות אובייקט ספק OAuth.

    מָהִיר

        provider.getCredentialWith(nil) { credential, error in
          if error != nil {
            // Handle error.
          }
          if credential != nil {
            Auth.auth().signIn(with: credential) { authResult, error in
              if error != nil {
                // Handle error.
              }
              // User is signed in.
              // IdP data available in authResult.additionalUserInfo.profile.
              // Twitter OAuth access token can also be retrieved by:
              // authResult.credential.accessToken
              // Twitter OAuth ID token can be retrieved by calling:
              // authResult.credential.idToken
              // Twitter OAuth secret can be retrieved by calling:
              // authResult.credential.secret
            }
          }
        }
        

    Objective-C

        [provider getCredentialWithUIDelegate:nil
                                   completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) {
          if (error) {
           // Handle error.
          }
          if (credential) {
            [[FIRAuth auth] signInWithCredential:credential
                                      completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) {
              if (error) {
                // Handle error.
              }
              // User is signed in.
              // IdP data available in authResult.additionalUserInfo.profile.
              // Twitter OAuth access token can also be retrieved by:
              // authResult.credential.accessToken
              // Twitter OAuth ID token can be retrieved by calling:
              // authResult.credential.idToken
              // Twitter OAuth secret can be retrieved by calling:
              // authResult.credential.secret
            }];
          }
        }];
        

    באמצעות אסימון הגישה של OAuth, אתה יכול לקרוא ל- Twitter API .

    לדוגמה, כדי לקבל מידע בסיסי על הפרופיל, אתה יכול לקרוא ל- REST API, להעביר את אסימון הגישה בכותרת Authorization :

    https://api.twitter.com/labs/1/users?usernames=TwitterDev
    
  6. בעוד שהדוגמאות לעיל מתמקדות בזרימות כניסה, יש לך גם את היכולת לקשר ספק טוויטר למשתמש קיים. לדוגמה, אתה יכול לקשר מספר ספקים לאותו משתמש ולאפשר להם להיכנס עם אחד מהם.

    מָהִיר

        Auth().currentUser.link(withCredential: credential) { authResult, error in
          if error != nil {
            // Handle error.
          }
          // Twitter credential is linked to the current user.
          // IdP data available in authResult.additionalUserInfo.profile.
          // Twitter OAuth access token can also be retrieved by:
          // authResult.credential.accessToken
          // Twitter OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
          // Twitter OAuth secret can be retrieved by calling:
          // authResult.credential.secret
        }
        

    Objective-C

        [[FIRAuth auth].currentUser
            linkWithCredential:credential
                    completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
          if (error) {
            // Handle error.
          }
          // Twitter credential is linked to the current user.
          // IdP data available in authResult.additionalUserInfo.profile.
          // Twitter OAuth access token is can also be retrieved by:
          // authResult.credential.accessToken
          // Twitter OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
          // Twitter OAuth secret can be retrieved by calling:
          // authResult.credential.secret
        }];
        
  7. ניתן להשתמש באותה דפוס עם reauthenticateWithCredential אשר ניתן להשתמש בו כדי לאחזר אישורים טריים עבור פעולות רגישות הדורשות כניסה אחרונה.

    מָהִיר

        Auth().currentUser.reauthenticateWithCredential(withCredential: credential) { authResult, error in
          if error != nil {
            // Handle error.
          }
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
          // Additional OAuth access token is can also be retrieved by:
          // authResult.credential.accessToken
          // Twitter OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
          // Twitter OAuth secret can be retrieved by calling:
          // authResult.credential.secret
        }
        

    Objective-C

        [[FIRAuth auth].currentUser
            reauthenticateWithCredential:credential
                              completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
          if (error) {
            // Handle error.
          }
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
          // Additional OAuth access token is can also be retrieved by:
          // authResult.credential.accessToken
          // Twitter OAuth ID token can be retrieved by calling:
          // authResult.credential.idToken
          // Twitter OAuth secret can be retrieved by calling:
          // authResult.credential.secret
        }];
        

הצעדים הבאים

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

  • באפליקציות שלך, תוכל לקבל את פרטי הפרופיל הבסיסיים של המשתמש מאובייקט FIRUser . ראה ניהול משתמשים .

  • בכללי האבטחה של מסד הנתונים בזמן אמת של Firebase ואחסון בענן , תוכל לקבל את מזהה המשתמש הייחודי של המשתמש auth ממשתנה האימות, ולהשתמש בו כדי לשלוט לאילו נתונים המשתמש יכול לגשת.

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

כדי לצאת ממשתמש, התקשר signOut: .

מָהִיר

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}
  

Objective-C

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

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