אמת עם Firebase באמצעות מספר טלפון עם אחדות

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

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

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

  1. לפני שתוכל להשתמש באימות Firebase , אתה צריך להוסיף את ה- SDK האחדות Firebase (במיוחד, FirebaseAuth.unitypackage ) לפרויקט האחדות שלך.

    להנחיות מפורטות שלבי ההתקנה הראשוניים הללו הוסף Firebase לפרויקט האחדות שלך .

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

ב- iOS, שים לב שהכניסה למספר טלפון דורשת מכשיר פיזי ולא תעבוד על סימולטור.

חששות אבטחה

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

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

אפשר כניסה למספר טלפון לפרויקט Firebase שלך

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

  1. בשנות ה קונסולת Firebase , פתח את קטע האימות.
  2. בדף הכניסה של שיטה, לאפשר כניסת מספר טלפון שיטה.

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

התחל לקבל הודעות APN (iOS בלבד)

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

כדי לאפשר התראות APN לשימוש עם אימות Firebase:

  1. בשנת Xcode, אפשר לדחוף הודעות עבור הפרויקט שלך.
  2. העלה את תעודת ה- APN שלך ל- Firebase. אם עדיין אין לך תעודת APNs, הקפד ליצור אחד המפתחים של אפל חבר המרכז .

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

    2. בחר בלחצן העלאת האישור עבור תעודת הפיתוח, אישור גרסת הייצור, או שניהם. נדרש לפחות אחד.

    3. עבור כל אישור, בחר את קובץ .p12 וספק את הסיסמה, אם קיימת. ודא שמזהה החבילה לתעודה זו תואם את מזהה החבילה של האפליקציה שלך. בחר שמור.

שלח קוד אימות לטלפון של המשתמש

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

  1. קבל את מספר הטלפון של המשתמש.

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

  2. התקשר PhoneAuthProvider.VerifyPhoneNumber , עובר אליו את מספר הטלפון של המשתמש.
    PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth);
    provider.VerifyPhoneNumber(phoneNumber, phoneAuthTimeoutMs, null,
      verificationCompleted: (credential) => {
        // Auto-sms-retrieval or instant validation has succeeded (Android only).
        // There is no need to input the verification code.
        // `credential` can be used instead of calling GetCredential().
      },
      verificationFailed: (error) => {
        // The verification code was not sent.
        // `error` contains a human readable explanation of the problem.
      },
      codeSent: (id, token) => {
        // Verification code was successfully sent via SMS.
        // `id` contains the verification id that will need to passed in with
        // the code from the user when calling GetCredential().
        // `token` can be used if the user requests the code be sent again, to
        // tie the two requests together.
      },
      codeAutoRetrievalTimeout: (id) => {
        // Called when the auto-sms-retrieval has timed out, based on the given
        // timeout parameter.
        // `id` contains the verification id of the request that timed out.
      });
    
    כשאתה מתקשר PhoneAuthProvider.VerifyPhoneNumber , Firebase,
    • (ב- iOS), שולח הודעת דחיפה שקטה לאפליקציה שלך.
    • Firebase שולח הודעת SMS המכילה קוד אימות למספר הטלפון שצוין ומעביר מזהה אימות לפונקציית ההשלמה שלך. תצטרך את קוד האימות ואת מזהה האימות כדי להיכנס למשתמש.
  3. שמור את מזהה האימות ושחזר אותו כאשר האפליקציה שלך נטענת. בכך תוכל לוודא שעדיין יש לך מזהה אימות חוקי אם האפליקציה שלך תסתיים לפני שהמשתמש ישלים את זרימת הכניסה (לדוגמה, בעת מעבר לאפליקציית ה- SMS).

    תוכל להמשיך את מזהה האימות בכל דרך שתרצה. דרך פשוטה היא לשמור את הזהות אימות עם UnityEngine.PlayerPrefs .

אם ההתקשרות עברה כדי codeSent נקראת, אתה יכול לבקש מהמשתמש להקליד את קוד האימות כשהם מקבלים אותו בהודעת SMS.

מצד השני, אם ההתקשרות עבור verificationCompleted נקראת, אז אימות אוטומטית הצליחה ואתה עכשיו יש Credential שבה ניתן להשתמש כמתואר להלן.

היכנס למשתמש באמצעות קוד האימות

לאחר שהמשתמש יספק את האפליקציה באמצעות קוד האימות מהודעת SMS, לחתום על המשתמש על ידי יצירת Credential אובייקט מקוד אימות זיהוי ואימות עובר אובייקט כדי FirebaseAuth.SignInWithCredential .

  1. קבל את קוד האימות מהמשתמש.
  2. צור Credential אובייקט מקוד אימות זיהוי ואימות.
    Credential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. כניסה למשתמש עם Credential האובייקט:
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " +
                       task.Exception);
        return;
      }
    
      FirebaseUser newUser = task.Result;
      Debug.Log("User signed in successfully");
      // This should display the phone number.
      Debug.Log("Phone number: " + newUser.PhoneNumber);
      // The phone number providerID is 'phone'.
      Debug.Log("Phone provider ID: " + newUser.ProviderId);
    });
    

הצעדים הבאים

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

  • באפליקציות שלך, אתה יכול לקבל את המידע הבסיסי של הפרופיל האישי של המשתמש מן Firebase.Auth.FirebaseUser האובייקט:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // 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 User.TokenAsync() instead.
      string uid = user.UserId;
    }
    
  • בבסיס הנתונים בזמן אמת Firebase שלך לאחסון בענן אבטחה חוקי , אתה יכול לקבל את שנכנסים למערכת זיהוי המשתמש הייחודי של המשתמש מן auth משתנה, ולהשתמש בו כדי לקבוע אילו נתונים גישה יכול משתמש.

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

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

auth.SignOut();