إدارة المستخدمين في 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 للمتابعة لإعادة التوجيه إلى التطبيق عند إرسال رسالة تحقق.

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

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 للمتابعة لإعادة التوجيه إلى التطبيق عند إرسال رسالة إلكترونية لإعادة ضبط كلمة المرور.

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

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