المصادقة مع Firebase باستخدام حسابات مستندة إلى كلمة المرور على Android

يمكنك استخدام Firebase Authentication للسماح للمستخدمين بالمصادقة باستخدام Firebase باستخدام عناوين بريدهم الإلكتروني وكلمات مرورهم، وإدارة حسابات تطبيقك المستندة إلى كلمة المرور.

قبل البدء

  1. أضِف Firebase إلى مشروع Android الخاص بك، في حال لم يسبق لك إجراء ذلك.

  2. إذا لم تكن قد ربطت تطبيقك بمشروعك في Firebase بعد، يمكنك إجراء ذلك من وحدة تحكّم Firebase.
  3. تفعيل تسجيل الدخول باستخدام عنوان البريد الإلكتروني/كلمة المرور:
    1. في وحدة تحكُّم Firebase، افتح قسم المصادقة.
    2. في علامة التبويب طريقة تسجيل الدخول، فعِّل طريقة تسجيل الدخول باستخدام البريد الإلكتروني/كلمة المرور وانقر على حفظ.
  4. في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً <project>/<app-module>/build.gradle.kts أو <project>/<app-module>/build.gradle)، أضف التبعية لمكتبة Firebase Authentication لنظام التشغيل Android. ننصح باستخدام Firebase Android BoM للتحكم في إصدارات المكتبة.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.4.0"))
    
        // 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")
    }
    

    باستخدام Firebase Android BoM، سيستخدم تطبيقك دائمًا إصدارات متوافقة من مكتبات Firebase لنظام التشغيل Android.

    (بديل) إضافة اعتماديات مكتبة Firebase بدون استخدام BoM

    إذا اخترت عدم استخدام Firebase BoM، عليك تحديد كل إصدار من مكتبة 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")
    }
    
    هل تبحث عن وحدة مكتبة خاصة بلغة Kotlin؟ اعتبارًا من تشرين الأول (أكتوبر) 2023 (Firebase BoM 32.5.0)، يمكن لمطوّري Kotlin وJava الاعتماد على وحدة المكتبة الرئيسية (للاطّلاع على التفاصيل، يُرجى الاطّلاع على الأسئلة الشائعة حول هذه المبادرة).

إنشاء حساب مستند إلى كلمة مرور

لإنشاء حساب مستخدم جديد باستخدام كلمة مرور، أكمل الخطوات التالية في نشاط تسجيل الدخول إلى تطبيقك:

  1. في طريقة 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();
  2. عند بدء النشاط، تحقّق ممّا إذا كان المستخدم مسجّلاً الدخول حاليًا:

    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();
        }
    }
  3. عندما يشترك مستخدم جديد باستخدام نموذج الاشتراك في تطبيقك، أكمِل أي نموذج جديد. خطوات تأكيد الحساب التي يتطلبها تطبيقك، مثل التحقق من أنّ تمّت كتابة كلمة المرور الخاصة بالحساب الجديد بشكل صحيح وبما أنّها تستوفي تعقيدك متطلبات المشروع.
  4. إنشاء حساب جديد من خلال إدخال عنوان البريد الإلكتروني وكلمة المرور للمستخدم الجديد إلى 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 للحصول على بيانات حساب المستخدم.

تسجيل دخول مستخدم باستخدام عنوان بريد إلكتروني وكلمة مرور

تتشابه خطوات تسجيل دخول مستخدم باستخدام كلمة مرور مع خطوات إنشاء حساب جديد. في نشاط تسجيل الدخول إلى تطبيقك، نفِّذ ما يلي:

  1. في طريقة 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();
  2. عند بدء النشاط، تحقّق ممّا إذا كان المستخدم مسجّلاً الدخول حاليًا:

    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();
        }
    }
  3. عندما يسجّل مستخدم الدخول إلى تطبيقك، عليك إرسال عنوان البريد الإلكتروني للمستخدم وكلمة المرور إلى 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:

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

تتيح Firebase Authentication سياسات كلمة المرور متطلبات كلمة المرور التالية:

  • يجب إدخال حرف صغير.

  • يجب إدخال حرف كبير.

  • يجب إدخال حرف رقمي.

  • يجب إدخال حرف غير أبجدي رقمي.

    تستوفي الأحرف التالية متطلبات الأحرف بخلاف الأحرف الأبجدية الرقمية: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • الحد الأدنى لطول كلمة المرور (يتراوح من 6 إلى 30 حرفًا، والإعداد التلقائي هو 6)

  • الحد الأقصى لطول كلمة المرور (الحد الأقصى 4096 حرفًا)

يمكنك تفعيل فرض سياسة كلمات المرور في وضعَين:

  • طلب: تفشل محاولات تسجيل الدخول إلى أن يغيّر المستخدم كلمة المرور لتكون متوافقة مع سياستك.

  • الإشعار: يُسمح للمستخدمين بتسجيل الدخول باستخدام كلمة مرور غير متوافقة. عند استخدام هذا الوضع، عليك التحقّق مما إذا كانت كلمة مرور المستخدم تمتثل للسياسة من جهة العميل وطلب تعديل كلمة المرور من العميل بطريقة ما إذا كانت لا تمتثل.

يُطلب من المستخدمين الجدد دائمًا اختيار كلمة مرور تتوافق مع .

إذا كان لديك مستخدمون نشطون، ننصحك بعدم تفعيل وضع "الطلب" ما لم تكن تريد حظر الوصول للمستخدمين الذين لا تلتزم كلمات مرورهم بسياستك. بدلاً من ذلك، استخدِم وضع الإشعار الذي يتيح للمستخدمين تسجيل الدخول باستخدام كلمات المرور، وإبلاغهم بالمتطلبات التي تفتقر إليها كلمة المرور.

إجراء مقترَح: تفعيل حماية تعداد البريد الإلكتروني

بعض Firebase Authentication طرق تستخدم عناوين البريد الإلكتروني عند طرح المَعلمات أخطاء محددة إذا كان عنوان البريد الإلكتروني غير مسجَّل عندما يجب تسجيله (على سبيل المثال، عند تسجيل الدخول باستخدام عنوان بريد إلكتروني وكلمة مرور)، أو المسجَّل عندما يجب عدم استخدامه (على سبيل المثال، عند تغيير عنوان البريد الإلكتروني لمستخدم). على الرغم من أنّ ذلك يمكن أن يكون مفيدًا لاقتراح حلول محدّدة للمستخدمين، يمكن أيضًا إساءة استخدامه من قِبل الجهات الضارّة لاكتشاف عناوين البريد الإلكتروني المسجّلة من قِبل مستخدميك.

للتخفيف من هذه الخطر، ننصحك بتفعيل الحماية من تعداد البريد الإلكتروني. لمشروعك باستخدام أداة gcloud في Google Cloud. لاحظ أن تفعيل هذا تغييرات في سلوك ميزة الإبلاغ عن أخطاء Firebase Authentication: تأكد من تطبيقك لا يعتمد على الأخطاء الأكثر تحديدًا.

الخطوات التالية

بعد أن يسجّل المستخدم الدخول لأول مرة، يتم إنشاء حساب مستخدم جديد وربطه ببيانات الاعتماد التي استخدمها المستخدم لتسجيل الدخول، أي اسم المستخدم وكلمة المرور أو رقم الهاتف أو معلومات مقدّم خدمة المصادقة. هذا الجديد كجزء من مشروع Firebase، ويمكن استخدامه لتحديد مستخدم في كل تطبيق في مشروعك، بغض النظر عن كيفية تسجيل دخوله.

  • في تطبيقاتك، يمكنك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من العنصر FirebaseUser. راجِع إدارة المستخدِمين.

  • في Firebase Realtime Database وCloud Storage قواعد الأمان، تتيح لك الحصول على معرّف المستخدم الفريد للمستخدم الذي سجّل الدخول من المتغير auth، واستخدامها للتحكم في البيانات التي يمكن للمستخدم الوصول إليها

يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام طرق مصادقة متعددة. موفِّري خدمة المصادقة من خلال ربط بيانات اعتماد موفر المصادقة حساب مستخدم حالي

لتسجيل خروج مستخدم، اتصل بالرقم signOut:

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();