إدارة المستخدمين في 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 CLI. على سبيل المثال:

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