يمكنك استخدام مصادقة Firebase للسماح للمستخدمين بالمصادقة مع Firebase باستخدام عناوين البريد الإلكتروني وكلمات المرور، وإدارة حسابات تطبيقك المستندة إلى كلمة المرور.
قبل البدء
أضِف Firebase إلى مشروع Android إذا لم يسبق لك إجراء ذلك.
- إذا لم تكن قد ربطت تطبيقك بمشروعك في Firebase، يمكنك إجراء ذلك من خلال وحدة تحكُّم Firebase.
- فعِّل تسجيل الدخول باستخدام البريد الإلكتروني أو كلمة المرور:
- في وحدة تحكُّم Firebase، افتح قسم المصادقة.
- في علامة التبويب طريقة تسجيل الدخول، فعِّل طريقة تسجيل الدخول البريد الإلكتروني/كلمة المرور وانقر على حفظ.
في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً
<project>/<app-module>/build.gradle.kts
أو<project>/<app-module>/build.gradle
)، أضِف الاعتمادية لمكتبة مصادقة Firebase لنظام التشغيل Android. ننصح باستخدام بنود سياسة Android في Firebase للتحكّم في نُسَخ المكتبة.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.1.2")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth") }
باستخدام أداة إدارة قوائم التشغيل Android في Firebase، سيستخدم تطبيقك دائمًا الإصدارات المتوافقة من مكتبات Android في Firebase.
(بديل) إضافة ملحقات مكتبة Firebase بدون استخدام BoM
إذا اخترت عدم استخدام قائمة العناصر في Firebase، يجب تحديد كل إصدار من مكتبة Firebase في سطر الاعتمادية الخاص به.
يُرجى العِلم أنّه إذا كنت تستخدم مكتبات متعددة لمنصة Firebase في تطبيقك، ننصحك بشدّة باستخدام BoM لإدارة إصدارات المكتبة، ما يضمن توافق جميع الإصدارات.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:23.0.0") }
إنشاء حساب مستنِد إلى كلمة المرور
لإنشاء حساب مستخدم جديد باستخدام كلمة مرور، أكمِل الخطوات التالية ضمن نشاط تسجيل الدخول إلى تطبيقك:
- في طريقة
onCreate
الخاصة بنشاط الاشتراك، احصل على المثيل المشترك لكائنFirebaseAuth
:Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- عند إعداد نشاطك، يُرجى التأكّد ممّا إذا كان المستخدم مسجّلاً الدخول في الوقت الحالي:
Kotlin+KTX
public override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser if (currentUser != null) { reload() } }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); if(currentUser != null){ reload(); } }
- عندما يشترك مستخدم جديد باستخدام نموذج الاشتراك في تطبيقك، أكمِل أي خطوات جديدة يحتاج إليها تطبيقك لإثبات ملكية الحساب، مثل التأكّد من أنّ كلمة مرور الحساب الجديد مكتوبة بشكل صحيح وتفي بالمتطلبات المتعلّقة بالتعقيد.
- إنشاء حساب جديد من خلال تمرير عنوان البريد الإلكتروني وكلمة المرور للمستخدم الجديد إلى
createUserWithEmailAndPassword
:Kotlin+KTX
auth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "createUserWithEmail:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "createUserWithEmail:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "createUserWithEmail:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "createUserWithEmail:failure", task.getException()); Toast.makeText(EmailPasswordActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
getCurrentUser
للحصول على بيانات حساب المستخدم.
تسجيل دخول مستخدم باستخدام عنوان بريد إلكتروني وكلمة مرور
تتشابه خطوات تسجيل دخول المستخدم باستخدام كلمة المرور مع خطوات إنشاء حساب جديد. في نشاط تسجيل الدخول إلى تطبيقك، نفِّذ ما يلي:
- من خلال طريقة
onCreate
الخاصة بنشاط تسجيل الدخول، احصل على المثيل المشترك لكائنFirebaseAuth
:Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- عند إعداد نشاطك، يُرجى التأكّد ممّا إذا كان المستخدم مسجّلاً الدخول في الوقت الحالي:
Kotlin+KTX
public override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser if (currentUser != null) { reload() } }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); if(currentUser != null){ reload(); } }
- عندما يسجِّل أحد المستخدمين الدخول إلى تطبيقك، يُرجى إدخال عنوان بريده الإلكتروني وكلمة مروره إلى
signInWithEmailAndPassword
:Kotlin+KTX
auth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithEmail:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithEmail:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithEmail:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithEmail:failure", task.getException()); Toast.makeText(EmailPasswordActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
FirebaseUser
المعروض للمتابعة.
إجراء مقترَح: تفعيل حماية تعداد البريد الإلكتروني
تعرض بعض طرق مصادقة Firebase التي تأخذ عناوين البريد الإلكتروني كمعلَمات أخطاء محددة إذا كان عنوان البريد الإلكتروني غير مسجَّل عند الحاجة إلى تسجيله (على سبيل المثال، عند تسجيل الدخول باستخدام عنوان بريد إلكتروني وكلمة مرور) أو مسجَّلاً في حال وجوب عدم استخدامه (على سبيل المثال، عند تغيير عنوان البريد الإلكتروني للمستخدم). ومع أنّ هذه الميزة يمكن أن تكون مفيدة في اقتراح حلول محدّدة للمستخدمين، يمكن أيضًا أن تسيء الجهات الضارّة استخدامها لاكتشاف عناوين البريد الإلكتروني التي سجّلها المستخدمون.
للتخفيف من هذه الخطر، ننصحك بتفعيل الحماية من تعداد البريد الإلكتروني
لمشروعك باستخدام أداة Google Cloud gcloud
. تجدر الإشارة إلى أنّ تفعيل هذه الميزة يغيّر سلوك إعداد تقارير الأخطاء في مصادقة Firebase، لذا تأكّد من أنّ تطبيقك لا يعتمد على الأخطاء الأكثر تحديدًا.
الخطوات اللاحقة
بعد تسجيل دخول المستخدم للمرة الأولى، يتم إنشاء حساب مستخدم جديد وربطه ببيانات الاعتماد، أي اسم المستخدم وكلمة المرور، أو رقم الهاتف، أو معلومات مقدم خدمة المصادقة. يتم تخزين هذا الحساب الجديد كجزء من مشروعك في Firebase، ويمكن استخدامه لتحديد مستخدم على مستوى كل تطبيق في مشروعك، بغض النظر عن كيفية تسجيل المستخدم للدخول.
-
في تطبيقاتك، يمكنك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من العنصر
FirebaseUser
. يُرجى الاطّلاع على إدارة المستخدمين. في قاعدة بيانات Firebase في الوقت الفعلي وقواعد أمان Cloud Storage، يمكنك الحصول على رقم تعريف المستخدم الفريد للمستخدم الذي سجّل الدخول من المتغيّر
auth
واستخدامه للتحكّم في البيانات التي يمكن للمستخدم الوصول إليها.
يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام عدة موفِّري مصادقة من خلال ربط بيانات اعتماد موفِّر المصادقة بحساب مستخدم حالي.
لتسجيل خروج مستخدم، يمكنك الاتصال بالرقم
signOut
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();