مدیریت کاربران در 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 مقدار null را برمی‌گرداند. اگر کاربر از سیستم خارج شده باشد، 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;
  }
}

به‌روزرسانی نمایه کاربر

می‌توانید اطلاعات نمایه پایه کاربر—نام نمایشی کاربر و نشانی وب عکس نمایه—را با روش 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.");
  });
}

وارد کردن حساب‌های کاربری

بااستفاده از فرمان auth:import «میانای خط فرمان Firebase»، می‌توانید حساب‌های کاربری را از فایل به پروژه Firebase خود وارد کنید. برای مثال:

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