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

יצירת משתמש

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

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

אחזור המשתמש המחובר הנוכחי

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

Swift

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

Objective-C

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

שימוש במאזין מבטיח שהאובייקט של Auth לא נמצא במצב ביניים – כמו אתחול – כשמקבלים את המשתמש הנוכחי.

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

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];

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

אפשר לעדכן את פרטי הפרופיל הבסיסיים של משתמש – שם המשתמש המוצג והכתובת של תמונת הפרופיל – באמצעות הכיתה 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) {
  // ...
}];

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

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

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

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) {
  // ...
}];

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

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

בנוסף, אפשר להתאים את האימייל לאיפוס הסיסמה לשפה הרצויה על ידי עדכון קוד השפה במכונה של 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.
  }
}];

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

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

פעולות רגישות מסוימות לאבטחה, כמו מחיקת חשבון, להגדיר כתובת אימייל ראשית, וכן החלפת סיסמה – המשתמש צריך להזין נכנסו לאחרונה. אם מבצעים אחת מהפעולות האלה והמשתמש נכנס לחשבון לפני זמן רב מדי, הפעולה נכשלת עם השגיאה 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 ב-CLI של Firebase. לדוגמה:

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