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

إنشاء مستخدم

يمكنك إنشاء مستخدم جديد في مشروع Firebase الخاص بك عن طريق استدعاء الأسلوب CreateUserWithEmailAndPassword أو عن طريق تسجيل دخول مستخدم لأول مرة باستخدام موفر هوية موحد، مثل تسجيل الدخول إلى Google أو تسجيل الدخول إلى Facebook .

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

احصل على المستخدم الذي قام بتسجيل الدخول حاليًا

الطريقة الموصى بها للحصول على المستخدم الحالي هي تعيين منصت على كائن Auth:

Firebase.Auth.FirebaseAuth auth;
Firebase.Auth.FirebaseUser user;

// Handle initialization of the necessary firebase modules:
void InitializeFirebase() {
  Debug.Log("Setting up Firebase Auth");
  auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
  auth.StateChanged += AuthStateChanged;
  AuthStateChanged(this, null);
}

// Track state changes of the auth object.
void AuthStateChanged(object sender, System.EventArgs eventArgs) {
  if (auth.CurrentUser != user) {
    bool signedIn = user != auth.CurrentUser && auth.CurrentUser != null;
    if (!signedIn && user != null) {
      Debug.Log("Signed out " + user.UserId);
    }
    user = auth.CurrentUser;
    if (signedIn) {
      Debug.Log("Signed in " + user.UserId);
    }
  }
}

// Handle removing subscription and reference to the Auth instance.
// Automatically called by a Monobehaviour after Destroy is called on it.
void OnDestroy() {
  auth.StateChanged -= AuthStateChanged;
  auth = null;
}

باستخدام المستمع، يمكنك التأكد من أن كائن Auth ليس في حالة متوسطة - مثل التهيئة - عندما تحصل على المستخدم الحالي.

يمكنك أيضًا الحصول على المستخدم الذي قام بتسجيل الدخول حاليًا عن طريق الاتصال بـ CurrentUser . إذا لم يقم المستخدم بتسجيل الدخول، فسيعود CurrentUser بقيمة فارغة. إذا قام المستخدم بتسجيل الخروج، فسيُرجع IsValid() الخاص بالمستخدم خطأ.

الحفاظ على بيانات اعتماد المستخدم

سيتم تخزين بيانات اعتماد المستخدم في مخزن المفاتيح المحلي بعد تسجيل دخول المستخدم. ويمكن حذف ذاكرة التخزين المؤقت المحلية لبيانات اعتماد المستخدم عن طريق تسجيل خروج المستخدم. مخزن المفاتيح خاص بالمنصة:

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

للحصول على معلومات ملف تعريف المستخدم، استخدم أساليب الوصول لمثيل Firebase.Auth.FirebaseUser . على سبيل المثال:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  string name = user.DisplayName;
  string email = user.Email;
  System.Uri photo_url = user.PhotoUrl;
  // The user's Id, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server, if you
  // have one; use User.TokenAsync() instead.
  string uid = user.UserId;
}

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

للحصول على معلومات الملف الشخصي التي تم استردادها من موفري تسجيل الدخول المرتبطين بمستخدم، استخدم طريقة ProviderData . على سبيل المثال:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  foreach (var profile in user.ProviderData) {
    // Id of the provider (ex: google.com)
    string providerId = profile.ProviderId;

    // UID specific to the provider
    string uid = profile.UserId;

    // Name, email address, and profile photo Url
    string name = profile.DisplayName;
    string email = profile.Email;
    System.Uri photoUrl = profile.PhotoUrl;
  }
}

تحديث الملف الشخصي للمستخدم

يمكنك تحديث معلومات الملف الشخصي الأساسية للمستخدم — اسم العرض الخاص بالمستخدم وعنوان URL لصورة الملف الشخصي — باستخدام أسلوب UpdateUserProfile . على سبيل المثال:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  Firebase.Auth.UserProfile profile = new Firebase.Auth.UserProfile {
    DisplayName = "Jane Q. User",
    PhotoUrl = new System.Uri("https://example.com/jane-q-user/profile.jpg"),
  };
  user.UpdateUserProfileAsync(profile).ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("UpdateUserProfileAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("UpdateUserProfileAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("User profile updated successfully.");
  });
}

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

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

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  user.UpdateEmailAsync("user@example.com").ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("UpdateEmailAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("UpdateEmailAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("User email updated successfully.");
  });
}

أرسل للمستخدم رسالة التحقق بالبريد الإلكتروني

يمكنك إرسال بريد إلكتروني للتحقق من العنوان إلى مستخدم باستخدام طريقة SendEmailVerification . على سبيل المثال:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  user.SendEmailVerificationAsync().ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("SendEmailVerificationAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("SendEmailVerificationAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("Email sent successfully.");
  });
}

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

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

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

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
string newPassword = "SOME-SECURE-PASSWORD";
if (user != null) {
  user.UpdatePasswordAsync(newPassword).ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("UpdatePasswordAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("UpdatePasswordAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("Password updated successfully.");
  });
}

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

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

string emailAddress = "user@example.com";
if (user != null) {
  auth.SendPasswordResetEmailAsync(emailAddress).ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("SendPasswordResetEmailAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("SendPasswordResetEmailAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("Password reset email sent successfully.");
  });
}

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

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

حذف مستخدم

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

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null) {
  user.DeleteAsync().ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("DeleteAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("DeleteAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("User deleted successfully.");
  });
}

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

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

تتطلب بعض الإجراءات الحساسة للأمان، مثل حذف حساب وتعيين عنوان بريد إلكتروني أساسي وتغيير كلمة المرور ، أن يكون المستخدم قد قام بتسجيل الدخول مؤخرًا. إذا قمت بتنفيذ أحد هذه الإجراءات، وقام المستخدم بتسجيل الدخول منذ فترة طويلة جدًا، فشل العمل.

عندما يحدث ذلك، قم بإعادة مصادقة المستخدم عن طريق الحصول على بيانات اعتماد تسجيل دخول جديدة من المستخدم وتمرير بيانات الاعتماد إلى Reauthenticate . على سبيل المثال:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;

// Get auth credentials from the user for re-authentication. The example below shows
// email and password credentials but there are multiple possible providers,
// such as GoogleAuthProvider or FacebookAuthProvider.
Firebase.Auth.Credential credential =
    Firebase.Auth.EmailAuthProvider.GetCredential("user@example.com", "password1234");

if (user != null) {
  user.ReauthenticateAsync(credential).ContinueWith(task => {
    if (task.IsCanceled) {
      Debug.LogError("ReauthenticateAsync was canceled.");
      return;
    }
    if (task.IsFaulted) {
      Debug.LogError("ReauthenticateAsync encountered an error: " + task.Exception);
      return;
    }

    Debug.Log("User reauthenticated successfully.");
  });
}

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

يمكنك استيراد حسابات المستخدمين من ملف إلى مشروع Firebase الخاص بك باستخدام أمر auth:import الخاص بـ Firebase CLI. على سبيل المثال:

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