مدیریت کاربران در Firebase

ایجاد کاربر

برای ایجاد کاربر جدید، گزینه‌های زیر را دارید:

  • از برنامه خود: با فراخوانی روش createUser یا با ورود به سیستم کاربر برای اولین‌بار بااستفاده از ارائه‌دهنده هویت فدرال، مانند ورود به سیستم Google یا ورود به سیستم Facebook، کاربر جدیدی در پروژه Firebase خود ایجاد کنید.

  • در کنسول Firebase: کاربر اصالت‌سنجی‌شده با گذرواژه جدیدی در برگه امنیت > اصالت‌سنجی > کاربران ایجاد کنید.

کاربر واردشده به سیستم فعلی را دریافت کنید

روش توصیه‌شده برای دریافت کاربر فعلی، تنظیم شنونده روی شیء Auth است:

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 ببینید.

همچنین می‌توان وضعیت را ازطریق نشانی وب ادامه منتقل کرد تا هنگام ارسال ایمیل درستی‌سنجی، به برنامه هدایت شود.

علاوه‌براین، می‌توانید ایمیل درستی‌سنجی را با به‌روزرسانی کد زبان در نمونه 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) {
  // ...
}];

در صفحه «الگوهای ایمیل»، می‌توانید الگوی ایمیلی را که در بخش «اصالت‌سنجی» Firebase کنسول استفاده می‌شود سفارشی‌سازی کنید. در «مرکز راهنمایی 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.
  }
}];

وارد کردن حساب‌های کاربری

بااستفاده از فرمان auth:import «میانای خط فرمان Firebase»، می‌توانید حساب‌های کاربری را از فایل به پروژه Firebase خود وارد کنید. برای مثال:

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