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

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

قبل البدء

  1. أضِف Firebase إلى مشروع JavaScript.
  2. إذا لم يسبق لك ربط تطبيقك بمشروع Firebase، يمكنك إجراء ذلك من وحدة تحكّم Firebase.
  3. تفعيل تسجيل الدخول باستخدام البريد الإلكتروني وكلمة المرور:
    1. في Firebase وحدة التحكّم، افتح قسم المصادقة.
    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;
        // ..
      });
    إذا تم إنشاء الحساب الجديد، يتم تسجيل دخول المستخدم تلقائيًا. اطّلِع على قسم "الخطوات التالية" أدناه للحصول على تفاصيل المستخدم الذي سجّل الدخول.

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

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

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

  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;
      });
    اطّلِع على قسم "الخطوات التالية" أدناه للحصول على تفاصيل المستخدم الذي سجّل الدخول.

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

يُنصح بما يلي: ضبط سياسة كلمة مرور

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

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

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

تتيح سياسات كلمات المرور 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 التي تستخدم عناوين البريد الإلكتروني كمعلَمات أخطاءً محدّدة إذا كان عنوان البريد الإلكتروني غير مسجّل عندما يجب أن يكون مسجّلاً (على سبيل المثال، عند تسجيل الدخول باستخدام عنوان بريد إلكتروني وكلمة مرور)، أو مسجّلاً عندما يجب أن يكون غير مستخدَم (على سبيل المثال، عند تغيير عنوان البريد الإلكتروني للمستخدم). على الرغم من أنّ هذه الطريقة يمكن أن تكون مفيدة في اقتراح حلول محدّدة للمستخدمين، إلا أنّ الجهات المسيئة يمكن أن تستغلّها في التعرّف على عناوين البريد الإلكتروني التي سجّلها المستخدمون.

للحدّ من هذا الخطر، ننصحك بتفعيل ميزة الحماية من تعداد عناوين البريد الإلكتروني لمشروعك باستخدام أداة gcloud في Google Cloud. يُرجى العِلم أنّ تفعيل هذه الميزة سيغيّر سلوك الإبلاغ عن الأخطاء في 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.
});