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

إنشاء مستخدم

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

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

الحصول على المستخدم المُسجِّل الدخول حاليًا

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

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;
}

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

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

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

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

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

للحصول على معلومات الملف الشخصي لأحد المستخدمين، استخدم طرق الموصّل لمثيل 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. على سبيل المثال:

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