إدارة المستخدمين في Firebase

إنشاء مستخدم

يمكنك إنشاء مستخدم جديد في مشروع Firebase بأربع طرق:

  • وعليك استدعاء الطريقة createUserWithEmailAndPassword().
  • تسجيل دخول المستخدم لأول مرة باستخدام موفِّر الهوية الموحدة، مثل تسجيل الدخول في Google، أو تسجيل الدخول إلى Facebook، أو Apple.

يمكنك أيضًا إنشاء مستخدمين جدد تمت مصادقتهم بكلمة المرور من خلال صفحة قسم وحدة تحكُّم Firebase في صفحة "المستخدمون".

الحصول على ملف شخصي للمستخدم

للحصول على معلومات الملف الشخصي لأحد المستخدمين، استخدِم خصائص User. تتوفر ثلاث طرق لجعل عنصر User يمثّل المستخدم الحالي:

  • مصادر البيانات "authStateChanges" و"idTokenChanges" و"userChanges": سيتلقى المستمعون User الحالي، أو null إذا لم يكن هناك تمت المصادقة:

    FirebaseAuth.instance
      .authStateChanges()
      .listen((User? user) {
        if (user != null) {
          print(user.uid);
        }
      });
    

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

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

  • عنصر UserCredential الذي تعرضه المصادقة (-signIn) الطرق: يحتوي الكائن UserCredential على السمة user مع السمة الحالية User:

    final userCredential =
        await FirebaseAuth.instance.signInWithCredential(credential);
    final user = userCredential.user;
    print(user?.uid);
    
  • السمة currentUser لمثيل FirebaseAuth: إذا كنت متأكدًا من أنّ قيمة السمة المستخدم مسجّل الدخول حاليًا، ويمكنك الوصول إلى User من خلال currentUser الموقع:

    if (FirebaseAuth.instance.currentUser != null) {
      print(FirebaseAuth.instance.currentUser?.uid);
    }
    

    يمكن أن تكون قيمة السمة currentUser هي null لسببَين:

    • لم يسجّل المستخدم الدخول.
    • لم تنتهِ عملية إعداد كائن المصادقة. إذا كنت تستخدم مستمعًا لإبقاء لتتبع حالة تسجيل دخول المستخدم، فلن تحتاج إلى معالجة هذه الحالة.

الحصول على معلومات الملف الشخصي الخاصة بمقدّم خدمة المستخدِم

لاسترداد معلومات الملف الشخصي من مقدّمي الخدمات الذين يستخدمون تسجيل الدخول المرتبطين بخدمة المستخدم، يُرجى استخدام السمة providerData. على سبيل المثال:

if (user != null) {
    for (final providerProfile in user.providerData) {
        // ID of the provider (google.com, apple.com, etc.)
        final provider = providerProfile.providerId;

        // UID specific to the provider
        final uid = providerProfile.uid;

        // Name, email address, and profile photo URL
        final name = providerProfile.displayName;
        final emailAddress = providerProfile.email;
        final profilePhoto = providerProfile.photoURL;
    }
}

تعديل الملف الشخصي للمستخدم

يمكنك تعديل معلومات الملف الشخصي الأساسية للمستخدم، مثل الاسم المعروض للمستخدم. وعنوان URL لصورة الملف الشخصي مع الطرق update. على سبيل المثال:

await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");

ضبط عنوان البريد الإلكتروني للمستخدم

يمكنك ضبط عنوان البريد الإلكتروني للمستخدم باستخدام الطريقة updateEmail(). على سبيل المثال:

await user?.updateEmail("janeq@example.com");

إرسال رسالة تحقق إلى المستخدم

يمكنك إرسال رسالة إلكترونية لإثبات صحة العنوان إلى مستخدم لديه طريقة sendEmailVerification(). على سبيل المثال:

await user?.sendEmailVerification();

يمكنك تخصيص نموذج البريد الإلكتروني المستخدم في قسم المصادقة في وحدة تحكم Firebase، في صفحة "نماذج البريد الإلكتروني". الاطّلاع على نماذج الرسائل الإلكترونية في مركز مساعدة Firebase.

من الممكن أيضًا تمرير الحالة عبر متابعة عنوان URL لإعادة التوجيه إلى التطبيق عند إرسال رسالة تحقق.

بالإضافة إلى ذلك، يمكنك أقلمة رسالة إثبات الملكية من خلال تعديل اللغة. الرمز على مثيل Auth قبل إرسال الرسالة الإلكترونية. على سبيل المثال:

await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();

ضبط كلمة مرور مستخدم

يمكنك ضبط كلمة مرور المستخدم باستخدام الطريقة updatePassword(). على سبيل المثال:

await user?.updatePassword(newPassword);

إرسال رسالة إلكترونية لإعادة ضبط كلمة المرور

يمكنك إرسال رسالة إلكترونية لإعادة ضبط كلمة المرور إلى مستخدم باستخدام sendPasswordResetEmail() . على سبيل المثال:

await FirebaseAuth.instance
    .sendPasswordResetEmail(email: "user@example.com");

يمكنك تخصيص نموذج البريد الإلكتروني المستخدم في قسم المصادقة في وحدة تحكم Firebase، في صفحة "نماذج البريد الإلكتروني". الاطّلاع على نماذج الرسائل الإلكترونية في مركز مساعدة Firebase.

من الممكن أيضًا تمرير الحالة عبر متابعة عنوان URL لإعادة التوجيه إلى التطبيق عند إرسال رسالة إلكترونية لإعادة تعيين كلمة المرور.

بالإضافة إلى ذلك، يمكنك ترجمة الرسالة الإلكترونية لإعادة ضبط كلمة المرور من خلال تعديل اللغة. الرمز على مثيل Auth قبل إرسال الرسالة الإلكترونية. على سبيل المثال:

await FirebaseAuth.instance.setLanguageCode("fr");

يمكنك أيضًا إرسال رسائل إلكترونية لإعادة ضبط كلمة المرور من "وحدة تحكُّم Firebase".

حذف مستخدم

يمكنك حذف حساب مستخدم من خلال الطريقة delete(). على سبيل المثال:

await user?.delete();

يمكنك أيضًا حذف المستخدمين من قسم المصادقة في وحدة تحكُّم Firebase في صفحة "المستخدمون".

إعادة مصادقة مستخدم

قد تتضمن بعض الإجراءات الحساسة للأمان - مثل حذف حساب إعداد عنوان بريد إلكتروني رئيسي تغيير كلمة المرور: يتطلب ذلك أن يكون المستخدم لديه تم تسجيل الدخول إليه مؤخرًا. في حال نفّذت أحد هذه الإجراءات وسجّل المستخدم الدخول منذ وقت طويل جدًا، تعذّر الإجراء وعرض FirebaseAuthException مع الرمز requires-recent-login عند حدوث ذلك، عليك إعادة مصادقة المستخدم من خلال الحصول على بيانات اعتماد تسجيل دخول جديدة. من المستخدم وتمرير بيانات الاعتماد إلى reauthenticate. على سبيل المثال:

// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);

استيراد حسابات المستخدمين

يمكنك استيراد حسابات المستخدمين من ملف إلى مشروعك على Firebase باستخدام الأمر auth:import في واجهة سطر الأوامر في Firebase. على سبيل المثال:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14