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

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

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

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

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

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

سویفت

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

هدف-سی

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

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

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

سویفت

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

هدف-سی

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

هدف-سی

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

هدف-سی

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

به‌روزرسانی پروفایل کاربر

شما می‌توانید اطلاعات اولیه پروفایل یک کاربر - نام نمایشی کاربر و آدرس اینترنتی عکس پروفایل - را با کلاس UserProfileChangeRequest به‌روزرسانی کنید. برای مثال:

سویفت

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

هدف-سی

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

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

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

سویفت

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

هدف-سی

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

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

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

سویفت

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

هدف-سی

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

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

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

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

سویفت

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

هدف-سی

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

هدف-سی

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

ارسال ایمیل تنظیم مجدد رمز عبور

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

سویفت

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

هدف-سی

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

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

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

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

سویفت

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

هدف-سی

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

هدف-سی

FIRUser *user = [FIRAuth auth].currentUser;

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

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

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

برخی از اقدامات حساس به امنیت - مانند حذف حساب کاربری ، تنظیم آدرس ایمیل اصلی و تغییر رمز عبور - مستلزم آن است که کاربر اخیراً وارد سیستم شده باشد. اگر یکی از این اقدامات را انجام دهید و کاربر مدت زیادی از ورود او گذشته باشد، این اقدام با خطای 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.
  }
}

هدف-سی

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