إنشاء مستخدم
تتوفّر لك الخيارات التالية لإنشاء مستخدم جديد:
من تطبيقك: أنشئ مستخدمًا جديدًا في مشروع Firebase من خلال استدعاء الطريقة
CreateUserWithEmailAndPasswordأو من خلال تسجيل دخول مستخدم لأول مرة باستخدام موفّر هوية موحّدة، مثل تسجيل الدخول باستخدام حساب Google أو تسجيل الدخول باستخدام Facebook.في وحدة تحكّم 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".
الاحتفاظ ببيانات اعتماد المستخدم
سيتم تخزين بيانات اعتماد المستخدم في مخزن المفاتيح المحلي بعد تسجيل دخول المستخدم. يمكن حذف ذاكرة التخزين المؤقت المحلية لبيانات اعتماد المستخدم من خلال تسجيل خروج المستخدم. يكون مخزن المفاتيح خاصًا بالنظام الأساسي:
- منصات Apple: خدمات سلسلة المفاتيح
- Android: Android Keystore
- Windows: Credential Management API
- OS X: خدمات سلسلة المفاتيح
- Linux: libsecret، ويجب أن يكون المستخدم قد ثبّته.
الحصول على ملف مستخدم
للحصول على معلومات الملف الشخصي للمستخدم، استخدِم طرق الوصول إلى مثيل من 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(); } }
تعديل ملف مستخدم
يمكنك تعديل المعلومات الأساسية في الملف الشخصي للمستخدم، أي الاسم المعروض للمستخدم وعنوان URL لصورة الملف الشخصي، باستخدام طريقة UpdateUserProfile. على سبيل المثال:
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); }
استيراد حسابات المستخدمين
يمكنك استيراد حسابات المستخدمين من ملف إلى مشروع Firebase باستخدام الأمر auth:import في Firebase CLI. على سبيل المثال:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14