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

یک کاربر ایجاد کنید

شما با فراخوانی متد createUser یا ورود به سیستم کاربر برای اولین بار با استفاده از یک ارائه دهنده هویت فدرال، مانند Google Sign-In یا Facebook Login ، یک کاربر جدید در پروژه Firebase خود ایجاد می کنید.

همچنین می‌توانید از بخش احراز هویت کنسول Firebase در صفحه کاربران، کاربران تأیید شده با رمز عبور جدید ایجاد کنید.

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

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

سویفت

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

هدف-C

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

با استفاده از شنونده، وقتی کاربر فعلی را دریافت می‌کنید، مطمئن می‌شوید که شی Auth در یک حالت میانی (مانند مقداردهی اولیه) نیست.

همچنین می توانید با استفاده از ویژگی currentUser کاربر وارد شده فعلی را دریافت کنید. اگر کاربر وارد سیستم نشده باشد، currentUser صفر است:

سویفت

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

هدف-C

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

پروفایل کاربری را دریافت کنید

برای دریافت اطلاعات نمایه کاربر، از ویژگی های یک نمونه از FIRUser استفاده کنید. به عنوان مثال:

سویفت

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 += " "
  }
  // ...
}

هدف-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 استفاده کنید. به عنوان مثال:

سویفت

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

هدف-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 به روز کنید. به عنوان مثال:

سویفت

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

هدف-C

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

آدرس ایمیل کاربر را تنظیم کنید

می توانید آدرس ایمیل کاربر را با روش updateEmail تنظیم کنید. به عنوان مثال:

سویفت

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

هدف-C

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

یک ایمیل تأیید برای کاربر ارسال کنید

می‌توانید با روش sendEmailVerificationWithCompletion: یک ایمیل تأیید آدرس برای کاربر ارسال کنید. به عنوان مثال:

سویفت

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

هدف-C

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

می‌توانید الگوی ایمیلی را که در بخش احراز هویت کنسول Firebase ، در صفحه الگوهای ایمیل استفاده می‌شود، سفارشی کنید. به الگوهای ایمیل در مرکز راهنمایی Firebase مراجعه کنید.

همچنین این امکان وجود دارد که وضعیت را از طریق URL ادامه دهید تا هنگام ارسال ایمیل تأیید به برنامه تغییر مسیر دهید.

علاوه بر این، می‌توانید با به‌روزرسانی کد زبان در نمونه Auth قبل از ارسال ایمیل، ایمیل تأیید را بومی‌سازی کنید. به عنوان مثال:

سویفت

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

هدف-C

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

رمز عبور یک کاربر را تنظیم کنید

می توانید رمز عبور کاربر را با روش updatePassword تعیین کنید. به عنوان مثال:

سویفت

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

هدف-C

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

یک ایمیل بازنشانی رمز عبور ارسال کنید

با روش sendPasswordReset می توانید یک ایمیل بازنشانی رمز عبور برای کاربر ارسال کنید. به عنوان مثال:

سویفت

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

هدف-C

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

می‌توانید الگوی ایمیلی را که در بخش احراز هویت کنسول Firebase ، در صفحه الگوهای ایمیل استفاده می‌شود، سفارشی کنید. به الگوهای ایمیل در مرکز راهنمایی Firebase مراجعه کنید.

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

علاوه بر این، می‌توانید با به‌روزرسانی کد زبان در نمونه Auth قبل از ارسال ایمیل، ایمیل بازنشانی رمز عبور را بومی‌سازی کنید. به عنوان مثال:

سویفت

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

هدف-C

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

همچنین می‌توانید ایمیل‌های بازنشانی رمز عبور را از کنسول Firebase ارسال کنید.

حذف یک کاربر

شما می توانید یک حساب کاربری را با روش delete حذف کنید. به عنوان مثال:

سویفت

let user = Auth.auth().currentUser

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

هدف-C

FIRUser *user = [FIRAuth auth].currentUser;

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

همچنین می‌توانید کاربران را از بخش تأیید هویت کنسول Firebase در صفحه کاربران حذف کنید.

احراز هویت مجدد یک کاربر

برخی از اقدامات حساس امنیتی - مانند حذف یک حساب ، تنظیم یک آدرس ایمیل اصلی و تغییر رمز عبور - مستلزم این است که کاربر اخیراً وارد سیستم شده باشد. اگر یکی از این اقدامات را انجام دهید و کاربر خیلی وقت پیش وارد سیستم شده باشد، عمل با خطای FIRAuthErrorCodeCredentialTooOld با شکست مواجه می شود. وقتی این اتفاق می‌افتد، با دریافت اعتبارنامه ورود به سیستم جدید از کاربر و ارسال اعتبار برای reauthenticate کاربر را دوباره احراز هویت کنید. به عنوان مثال:

سویفت

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.
  }
}

هدف-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 CLI می توانید حساب های کاربری را از یک فایل به پروژه Firebase وارد کنید. به عنوان مثال:

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