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

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

قبل البدء

  1. أضِف Firebase إلى مشروع JavaScript.
  2. إذا لم يسبق لك ربط تطبيقك بمشروعك على Firebase، يمكنك إجراء ذلك من خلال وحدة تحكُّم Firebase.
  3. تفعيل تسجيل الدخول باستخدام عنوان البريد الإلكتروني أو كلمة المرور:
    1. في وحدة تحكّم Firebase، افتح قسم Auth.
    2. في علامة التبويب طريقة تسجيل الدخول، فعِّل طريقة تسجيل الدخول باستخدام البريد الإلكتروني/كلمة المرور وانقر على حفظ.

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

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

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

    Web

    import { getAuth, createUserWithEmailAndPassword } from "firebase/auth";
    
    const auth = getAuth();
    createUserWithEmailAndPassword(auth, email, password)
      .then((userCredential) => {
        // Signed up 
        const user = userCredential.user;
        // ...
      })
      .catch((error) => {
        const errorCode = error.code;
        const errorMessage = error.message;
        // ..
      });

    Web

    firebase.auth().createUserWithEmailAndPassword(email, password)
      .then((userCredential) => {
        // Signed in 
        var user = userCredential.user;
        // ...
      })
      .catch((error) => {
        var errorCode = error.code;
        var errorMessage = error.message;
        // ..
      });
    في حال إنشاء الحساب الجديد، يتم تسجيل دخول المستخدم تلقائيًا. يمكنك الاطّلاع على قسم "الخطوات التالية" أدناه للحصول على تفاصيل المستخدم الذي سجّل الدخول.

    يمكنك أيضًا من هنا رصد الأخطاء ومعالجتها. للحصول على قائمة برموز الأخطاء، يمكنك الاطّلاع على المستندات المرجعية للمصادقة.

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

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

  1. عندما يسجّل مستخدم الدخول إلى تطبيقك، عليك إرسال عنوان البريد الإلكتروني للمستخدم وكلمة المرور إلى signInWithEmailAndPassword:

    Web

    import { getAuth, signInWithEmailAndPassword } from "firebase/auth";
    
    const auth = getAuth();
    signInWithEmailAndPassword(auth, email, password)
      .then((userCredential) => {
        // Signed in 
        const user = userCredential.user;
        // ...
      })
      .catch((error) => {
        const errorCode = error.code;
        const errorMessage = error.message;
      });

    Web

    firebase.auth().signInWithEmailAndPassword(email, password)
      .then((userCredential) => {
        // Signed in
        var user = userCredential.user;
        // ...
      })
      .catch((error) => {
        var errorCode = error.code;
        var errorMessage = error.message;
      });
    يمكنك الاطّلاع على قسم "الخطوات التالية" أدناه للحصول على تفاصيل المستخدم الذي سجّل الدخول.

    ويمكنك هنا أيضًا رصد الأخطاء ومعالجتها. للحصول على قائمة برموز الأخطاء، يمكنك الاطّلاع على مستندات مرجعية حول المصادقة.

إجراء ننصح به: ضبط سياسة لكلمة المرور

يمكنك تحسين أمان الحساب من خلال فرض متطلبات معيّنة على مدى تعقيد كلمة المرور.

لضبط سياسة كلمات المرور لمشروعك، افتح علامة التبويب سياسة كلمات المرور في صفحة "إعدادات المصادقة" في وحدة تحكّم Firebase:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

التحقق من صحة كلمة مرور على العميل

import { getAuth, validatePassword } from "firebase/auth";
const status = await validatePassword(getAuth(), passwordFromUser);
if (!status.isValid) {
  // Password could not be validated. Use the status to show what
  // requirements are met and which are missing.

  // If a criterion is undefined, it is not required by policy. If the
  // criterion is defined but false, it is required but not fulfilled by
  // the given password. For example:
  const needsLowerCase = status.containsLowercaseLetter !== true;
}

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

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

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

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

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

  • الطريقة التي ننصح بها في تطبيقاتك لمعرفة حالة المصادقة للمستخدم هي ضبط مراقب على كائن Auth. يمكنك بعد ذلك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من كائن User. راجِع إدارة المستخدمين.

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

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

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

Web

import { getAuth, signOut } from "firebase/auth";

const auth = getAuth();
signOut(auth).then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});

Web

firebase.auth().signOut().then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});