إنشاء مستخدم
يمكنك إنشاء مستخدم جديد في مشروع Firebase الخاص بك عن طريق استدعاء الأسلوب createUser
أو عن طريق تسجيل دخول مستخدم لأول مرة باستخدام موفر هوية موحد، مثل تسجيل الدخول إلى Google أو تسجيل الدخول إلى Facebook .
يمكنك أيضًا إنشاء مستخدمين جدد تمت مصادقةهم بكلمة مرور من قسم المصادقة في وحدة تحكم Firebase ، في صفحة المستخدمين.
احصل على المستخدم الذي قام بتسجيل الدخول حاليًا
الطريقة الموصى بها للحصول على المستخدم الحالي هي تعيين منصت على كائن Auth:
سويفت
handle = Auth.auth().addStateDidChangeListener { auth, user in // ... }
ج موضوعية
self.handle = [[FIRAuth auth] addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, FIRUser *_Nullable user) { // ... }];
باستخدام المستمع، يمكنك التأكد من أن كائن Auth ليس في حالة متوسطة - مثل التهيئة - عندما تحصل على المستخدم الحالي.
يمكنك أيضًا الحصول على المستخدم الذي قام بتسجيل الدخول حاليًا باستخدام خاصية currentUser
. إذا لم يقم المستخدم بتسجيل الدخول، فسيكون currentUser
صفرًا:
سويفت
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];
تحديث الملف الشخصي للمستخدم
يمكنك تحديث معلومات الملف الشخصي الأساسية للمستخدم — اسم العرض الخاص بالمستخدم وعنوان URL لصورة الملف الشخصي — باستخدام فئة 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 ، في صفحة قوالب البريد الإلكتروني. راجع قوالب البريد الإلكتروني في مركز مساعدة Firebase.
من الممكن أيضًا تمرير الحالة عبر عنوان URL للمتابعة لإعادة التوجيه مرة أخرى إلى التطبيق عند إرسال بريد إلكتروني للتحقق.
بالإضافة إلى ذلك، يمكنك ترجمة رسالة التحقق عبر البريد الإلكتروني عن طريق تحديث رمز اللغة في مثيل المصادقة قبل إرسال البريد الإلكتروني. على سبيل المثال:
سويفت
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 ، في صفحة قوالب البريد الإلكتروني. راجع قوالب البريد الإلكتروني في مركز مساعدة Firebase.
من الممكن أيضًا تمرير الحالة عبر عنوان URL للمتابعة لإعادة التوجيه مرة أخرى إلى التطبيق عند إرسال بريد إلكتروني لإعادة تعيين كلمة المرور.
بالإضافة إلى ذلك، يمكنك ترجمة البريد الإلكتروني لإعادة تعيين كلمة المرور عن طريق تحديث رمز اللغة في مثيل المصادقة قبل إرسال البريد الإلكتروني. على سبيل المثال:
سويفت
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.
}
}];
يمكنك أيضًا حذف المستخدمين من قسم المصادقة في وحدة تحكم Firebase ، في صفحة المستخدمين.
إعادة مصادقة المستخدم
تتطلب بعض الإجراءات الحساسة للأمان، مثل حذف حساب وتعيين عنوان بريد إلكتروني أساسي وتغيير كلمة المرور ، أن يكون المستخدم قد قام بتسجيل الدخول مؤخرًا. إذا قمت بتنفيذ أحد هذه الإجراءات، وقام المستخدم بتسجيل الدخول منذ فترة طويلة جدًا، فشل الإجراء بسبب الخطأ 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.
}
}];
استيراد حسابات المستخدمين
يمكنك استيراد حسابات المستخدمين من ملف إلى مشروع Firebase الخاص بك باستخدام أمر auth:import
الخاص بـ Firebase CLI. على سبيل المثال:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14