إدارة المستخدمين في Firebase

قم بإنشاء مستخدم

إنشاء مستخدم جديد في مشروع Firebase عن طريق استدعاء CreateUserWithEmailAndPassword طريقة أو عن طريق تسجيل الدخول للمستخدم لأول مرة باستخدام موفر الهوية الاتحادية، مثل جوجل الدخول في أو الفيسبوك الدخول .

يمكنك أيضا إنشاء المستخدمين مصادقة كلمة سر جديدة من قسم مصادقة من وحدة التحكم 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);

باستخدام مستمع ، فإنك تضمن أن كائن المصادقة ليس في حالة وسيطة - مثل التهيئة - عندما تحصل على المستخدم الحالي.

يمكنك أيضا الحصول على توقيع في الوقت الحالي المستخدم من خلال الدعوة current_user . إذا لم يتم توقيع المستخدم في، current_user عوائد nullptr.

حافظ على بيانات اعتماد المستخدم

سيتم تخزين بيانات اعتماد المستخدم في مخزن المفاتيح المحلي بعد تسجيل دخول المستخدم. يمكن حذف ذاكرة التخزين المؤقت المحلية لبيانات اعتماد المستخدم عن طريق تسجيل خروج المستخدم. Keystore هو نظام أساسي محدد:

احصل على ملف تعريف المستخدم

للحصول على معلومات المستخدم الشخصية، واستخدام أساليب استرجاع مثيل 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();
  }
}

تحديث ملف تعريف المستخدم

يمكنك تحديث المعلومات الشخصية الأساسي المستخدم المستخدم في عرض اسم وصورة الملف الشخصي URL-مع UpdateUserProfile الأسلوب. فمثلا:

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 ، على الصفحة المستخدمين.

إعادة مصادقة المستخدم

بعض إجراءات مثل الحساسة أمنيا كما حذف حساب ، وضع عنوان البريد الإلكتروني الرئيسي ، و تغيير كلمة المرور -require أن المستخدم قد وقعت مؤخرا في. إذا قمت بإجراء واحد من هذه الإجراءات، والمستعمل وقعت في وقتا طويلا قبل أن فشل العمل.

وعندما يحدث ذلك، وإعادة مصادقة المستخدم عن طريق الحصول على تسجيل الدخول الجديد أوراق اعتماد المستخدم وتمرير أوراق اعتماد ل 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);
}

استيراد حسابات المستخدمين

يمكنك استيراد حسابات المستخدمين من ملف في المشروع Firebase باستخدام Firebase CLI في auth:import الأوامر. فمثلا:

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