Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

مدیریت کاربران در 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 != nullptr) {
      // 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 کاربر وارد شده فعلی را دریافت کنید. اگر کاربری وارد نشده باشد، current_user nullptr را برمی‌گرداند.

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

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

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

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

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  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 != nullptr) {
  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 != nullptr) {
  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 != nullptr) {
  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 != nullptr) {
  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 != nullptr) {
  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 != nullptr) {
  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 != nullptr) {
  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