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

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

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

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

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

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

class MyAuthStateListener : public firebase::auth::AuthStateListener {
 public:
  void OnAuthStateChanged(firebase::auth::Auth* auth) override {
    firebase::auth::User user = auth->current_user();
    if (user.is_valid()) {
      // User is signed in
      printf("OnAuthStateChanged: signed_in %s\n", user.uid().c_str());
    } else {
      // User is signed out
      printf("OnAuthStateChanged: signed_out\n");
    }
    // ...
  }
};
// ... initialization code
// Test notification on registration.
MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);

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

همچنین می توانید با تماس با current_user کاربر وارد شده فعلی را دریافت کنید. اگر کاربری وارد نشده باشد، روش is_valid کاربر false را برمی‌گرداند.

اعتبار یک کاربر را حفظ کنید

پس از ورود کاربر به سیستم، اطلاعات کاربری کاربر در فروشگاه کلید محلی ذخیره می شود. حافظه پنهان محلی اطلاعات کاربری را می توان با خروج از سیستم حذف کرد. فروشگاه کلید مخصوص پلتفرم است:

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

برای دریافت اطلاعات نمایه کاربر، از روش های دسترسی نمونه ای از firebase::auth::User استفاده کنید. به عنوان مثال:

firebase::auth::User user = auth->current_user();
if (user.is_valid()) {
  std::string name = user.display_name();
  std::string email = user.email();
  std::string photo_url = user.photo_url();
  // 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 firebase::auth::User::Token() instead.
  std::string uid = user.uid();
}

اطلاعات نمایه ارائه دهنده خاص کاربر را دریافت کنید

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

firebase::auth::User user = auth->current_user();
if (user.is_valid()) {
  for (auto it = user.provider_data().begin();
       it != user.provider_data().end(); ++it) {
    firebase::auth::UserInfoInterface profile = *it;
    // Id of the provider (ex: google.com)
    std::string providerId = profile.provider_id();

    // UID specific to the provider
    std::string uid = profile.uid();

    // Name, email address, and profile photo Url
    std::string name = profile.display_name();
    std::string email = profile.email();
    std::string photoUrl = profile.photo_url();
  }
}

به روز رسانی نمایه یک کاربر

با روش UpdateUserProfile می توانید اطلاعات اولیه نمایه کاربر - نام نمایشی کاربر و URL عکس نمایه کاربر - را به روز کنید. به عنوان مثال:

firebase::auth::User user = auth->current_user();
if (user.is_valid()) {
  firebase::auth::User::UserProfile profile;
  profile.display_name = "Jane Q. User";
  profile.photo_url = "https://example.com/jane-q-user/profile.jpg";
  user.UpdateUserProfile(profile).OnCompletion(
      [](const firebase::Future<void>& completed_future, void* user_data) {
        // We are probably in a different thread right now.
        if (completed_future.error() == 0) {
          printf("User profile updated.");
        }
      },
      nullptr);  // pass user_data here.
}

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

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

firebase::auth::User user = auth->current_user();
if (user.is_valid()) {
  user.UpdateEmail("user@example.com")
      .OnCompletion(
          [](const firebase::Future<void>& completed_future,
             void* user_data) {
            // We are probably in a different thread right now.
            if (completed_future.error() == 0) {
              printf("User email address updated.");
            }
          },
          nullptr);
}

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

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

firebase::auth::User user = auth->current_user();
if (user.is_valid()) {
  user.SendEmailVerification().OnCompletion(
      [](const firebase::Future<void>& completed_future, void* user_data) {
        // We are probably in a different thread right now.
        if (completed_future.error() == 0) {
          printf("Email sent.");
        }
      },
      nullptr);
}

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

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

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

firebase::auth::User user = auth->current_user();
std::string newPassword = "SOME-SECURE-PASSWORD";

if (user.is_valid()) {
  user.UpdatePassword(newPassword.c_str())
      .OnCompletion(
          [](const firebase::Future<void>& completed_future,
             void* user_data) {
            // We are probably in a different thread right now.
            if (completed_future.error() == 0) {
              printf("password updated.");
            }
          },
          nullptr);
}

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

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

std::string emailAddress = "user@example.com";

auth->SendPasswordResetEmail(emailAddress.c_str())
    .OnCompletion(
        [](const firebase::Future<void>& completed_future,
           void* user_data) {
          // We are probably in a different thread right now.
          if (completed_future.error() == 0) {
            // Email sent.
          } else {
            // An error happened.
            printf("Error %d: %s", completed_future.error(),
                   completed_future.error_message());
          }
        },
        nullptr);

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

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

حذف یک کاربر

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

firebase::auth::User user = auth->current_user();
if (user.is_valid()) {
  user.Delete().OnCompletion(
      [](const firebase::Future<void>& completed_future, void* user_data) {
        if (completed_future.error() == 0) {
          // User deleted.
        } else {
          // An error happened.
          printf("Error %d: %s", completed_future.error(),
                 completed_future.error_message());
        }
      },
      nullptr);
}

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

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

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

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

firebase::auth::User user = auth->current_user();

// Get auth credentials from the user for re-authentication. The example
// below shows email and password credentials but there are multiple
// possible providers, such as GoogleAuthProvider or FacebookAuthProvider.
firebase::auth::Credential credential =
    firebase::auth::EmailAuthProvider::GetCredential("user@example.com",
                                                     "password1234");

if (user.is_valid()) {
  user.Reauthenticate(credential)
      .OnCompletion(
          [](const firebase::Future<void>& completed_future,
             void* user_data) {
            if (completed_future.error() == 0) {
              printf("User re-authenticated.");
            }
          },
          nullptr);
}

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

با استفاده از دستور auth:import در Firebase CLI می توانید حساب های کاربری را از یک فایل به پروژه Firebase وارد کنید. به عنوان مثال:

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