ניהול משתמשים ב-Firebase

יצירת משתמש

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

אפשר גם ליצור משתמשים חדשים עם אימות באמצעות סיסמה בקטע Authentication (אימות) במסוף Firebase, בדף Users (משתמשים).

קבלת המשתמש שמחובר כרגע

הדרך המומלצת לקבל את המשתמש הנוכחי היא להגדיר listener באובייקט אימות:

Swift

handle = Auth.auth().addStateDidChangeListener { auth, user in
  // ...
}

Objective-C

self.handle = [[FIRAuth auth]
    addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, FIRUser *_Nullable user) {
      // ...
    }];

שימוש ב-listener מבטיח שאובייקט האימות לא יהיה במצב ביניים – כמו מצב אתחול – כשמקבלים את המשתמש הנוכחי.

אפשר גם לקבל את המשתמש שמחובר כרגע באמצעות המאפיין currentUser. אם משתמש לא מחובר לחשבון, הערך של currentUser הוא nil:

Swift

if Auth.auth().currentUser != nil {
  // User is signed in.
  // ...
} else {
  // No user is signed in.
  // ...
}

Objective-C

if ([FIRAuth auth].currentUser) {
  // User is signed in.
  // ...
} else {
  // No user is signed in.
  // ...
}

קבלת פרופיל של משתמש

כדי לקבל את פרטי הפרופיל של משתמש, משתמשים במאפיינים של מופע של FIRUser. לדוגמה:

Swift

let user = Auth.auth().currentUser
if let user = user {
  // 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 getTokenWithCompletion:completion: instead.
  let uid = user.uid
  let email = user.email
  let photoURL = user.photoURL
  var multiFactorString = "MultiFactor: "
  for info in user.multiFactor.enrolledFactors {
    multiFactorString += info.displayName ?? "[DispayName]"
    multiFactorString += " "
  }
  // ...
}

Objective-C

FIRUser *user = [FIRAuth auth].currentUser;
if (user) {
  // 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 getTokenWithCompletion:completion: instead.
  NSString *email = user.email;
  NSString *uid = user.uid;
  NSMutableString *multiFactorString = [NSMutableString stringWithFormat:@"MultiFactor: "];
  for (FIRMultiFactorInfo *info in user.multiFactor.enrolledFactors) {
    [multiFactorString appendString:info.displayName];
    [multiFactorString appendString:@" "];
  }
  NSURL *photoURL = user.photoURL;
  // ...
}

קבלת מידע ספציפי על פרופיל של משתמש אצל ספק

כדי לקבל את פרטי הפרופיל שאוחזרו מספקי הכניסה שמקושרים למשתמש, משתמשים במאפיין providerData. לדוגמה:

Swift

let userInfo = Auth.auth().currentUser?.providerData[indexPath.row]
cell?.textLabel?.text = userInfo?.providerID
// Provider-specific UID
cell?.detailTextLabel?.text = userInfo?.uid

Objective-C

id<FIRUserInfo> userInfo = [FIRAuth auth].currentUser.providerData[indexPath.row];
cell.textLabel.text = [userInfo providerID];
// Provider-specific UID
cell.detailTextLabel.text = [userInfo uid];

עדכון הפרופיל של משתמש

אפשר לעדכן את פרטי הפרופיל הבסיסיים של המשתמש – שם התצוגה של המשתמש וכתובת ה-URL של תמונת הפרופיל – באמצעות המחלקה UserProfileChangeRequest. לדוגמה:

Swift

let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
changeRequest?.displayName = displayName
changeRequest?.commitChanges { error in
  // ...
}

Objective-C

FIRUserProfileChangeRequest *changeRequest = [[FIRAuth auth].currentUser profileChangeRequest];
changeRequest.displayName = userInput;
[changeRequest commitChangesWithCompletion:^(NSError *_Nullable error) {
  // ...
}];

הגדרת כתובת אימייל של משתמש

אפשר להגדיר את כתובת האימייל של המשתמש באמצעות השיטה updateEmail. לדוגמה:

Swift

Auth.auth().currentUser?.updateEmail(to: email) { error in
  // ...
}

Objective-C

[[FIRAuth auth].currentUser updateEmail:userInput completion:^(NSError *_Nullable error) {
  // ...
}];

שליחת הודעת אימות למשתמש

אפשר לשלוח אימייל לאימות כתובת למשתמש באמצעות השיטה sendEmailVerificationWithCompletion:. לדוגמה:

Swift

Auth.auth().currentUser?.sendEmailVerification { error in
  // ...
}

Objective-C

[[FIRAuth auth].currentUser sendEmailVerificationWithCompletion:^(NSError *_Nullable error) {
  // ...
}];

בדף Email Templates (תבניות אימייל) במסוף Firebase, בקטע Authentication (אימות), אפשר להתאים אישית את תבנית האימייל שבה נעשה שימוש. תוכלו לעיין במאמר בנושא תבניות אימייל במרכז העזרה של Firebase.

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

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

Swift

Auth.auth().languageCode = "fr"
// To apply the default app language instead of explicitly setting it.
// Auth.auth().useAppLanguage()

Objective-C

[FIRAuth auth].languageCode = @"fr";
// To apply the default app language instead of explicitly setting it.
// [[FIRAuth auth] useAppLanguage];

הגדרת סיסמה למשתמש

אפשר להגדיר סיסמה למשתמש באמצעות השיטה updatePassword. לדוגמה:

Swift

Auth.auth().currentUser?.updatePassword(to: password) { error in
  // ...
}

Objective-C

[[FIRAuth auth].currentUser updatePassword:userInput completion:^(NSError *_Nullable error) {
  // ...
}];

שליחת אימייל לאיפוס הסיסמה

אפשר לשלוח אימייל לאיפוס סיסמה למשתמש באמצעות השיטה sendPasswordReset. לדוגמה:

Swift

Auth.auth().sendPasswordReset(withEmail: email) { error in
  // ...
}

Objective-C

[[FIRAuth auth] sendPasswordResetWithEmail:userInput completion:^(NSError *_Nullable error) {
  // ...
}];

בדף Email Templates (תבניות אימייל) במסוף Firebase, בקטע Authentication (אימות), אפשר להתאים אישית את תבנית האימייל שבה נעשה שימוש. תוכלו לעיין במאמר בנושא תבניות אימייל במרכז העזרה של Firebase.

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

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

Swift

Auth.auth().languageCode = "fr"
// To apply the default app language instead of explicitly setting it.
// Auth.auth().useAppLanguage()

Objective-C

[FIRAuth auth].languageCode = @"fr";
// To apply the default app language instead of explicitly setting it.
// [[FIRAuth auth] useAppLanguage];

אפשר גם לשלוח אימיילים לאיפוס סיסמה מFirebaseהמסוף.

מחיקת משתמש

אפשר למחוק חשבון משתמש באמצעות השיטה delete. לדוגמה:

Swift

let user = Auth.auth().currentUser

user?.delete { error in
  if let error = error {
    // An error happened.
  } else {
    // Account deleted.
  }
}

Objective-C

FIRUser *user = [FIRAuth auth].currentUser;

[user deleteWithCompletion:^(NSError *_Nullable error) {
  if (error) {
    // An error happened.
  } else {
    // Account deleted.
  }
}];

אפשר גם למחוק משתמשים מהקטע Authentication בFirebaseמסוף, בדף Users.

אימות מחדש של משתמש

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

Swift

let user = Auth.auth().currentUser
var credential: AuthCredential

// Prompt the user to re-provide their sign-in credentials

user?.reauthenticate(with: credential) { error in
  if let error = error {
    // An error happened.
  } else {
    // User re-authenticated.
  }
}

Objective-C

FIRUser *user = [FIRAuth auth].currentUser;
FIRAuthCredential *credential;

// Prompt the user to re-provide their sign-in credentials

[user reauthenticateWithCredential:credential completion:^(NSError *_Nullable error) {
  if (error) {
    // An error happened.
  } else {
    // User re-authenticated.
  }
}];

ייבוא חשבונות משתמשים

אפשר לייבא חשבונות משתמשים מקובץ לפרויקט Firebase באמצעות הפקודה auth:import של Firebase CLI. לדוגמה:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14