مدیریت کاربران در Firebase

ایجاد یک کاربر

برای ایجاد کاربر جدید، گزینه‌های زیر را دارید:

  • از برنامه شما : با فراخوانی متد CreateUserWithEmailAndPassword یا با ورود کاربر برای اولین بار با استفاده از یک ارائه دهنده هویت فدرال، مانند Google Sign-In یا Facebook Login ، یک کاربر جدید در پروژه Firebase خود ایجاد کنید.

  • در کنسول Firebase : یک کاربر جدید با رمز عبور احراز هویت شده در تب Security > Authentication > Users ایجاد کنید.

دریافت کاربر فعلی وارد شده

روش پیشنهادی برای دریافت کاربر فعلی، تنظیم یک شنونده (listener) روی شیء 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() کاربر مقدار false را برمی‌گرداند.

اعتبارنامه کاربر را حفظ کنید

اطلاعات کاربری کاربر پس از ورود به سیستم، در حافظه‌ی کلید محلی ذخیره می‌شود. حافظه‌ی پنهان محلی اطلاعات کاربری را می‌توان با خروج کاربر از سیستم حذف کرد. این حافظه‌ی کلید مختص پلتفرم مورد نظر است:

دریافت پروفایل کاربر

برای دریافت اطلاعات پروفایل یک کاربر، از متدهای accessor یک نمونه از 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.");
  });
}

شما می‌توانید قالب ایمیل مورد استفاده را در تب Security > Authentication > Templates در کنسول 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.");
  });
}

شما می‌توانید قالب ایمیل مورد استفاده را در تب Security > Authentication > Templates در کنسول 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 در تب Security > Authentication > Users حذف کنید.

احراز هویت مجدد کاربر

برخی از اقدامات حساس به امنیت - مانند حذف حساب کاربری ، تنظیم آدرس ایمیل اصلی و تغییر رمز عبور - مستلزم آن است که کاربر اخیراً وارد سیستم شده باشد. اگر یکی از این اقدامات را انجام دهید و کاربر مدت زیادی پیش وارد سیستم شده باشد، اقدام با شکست مواجه می‌شود.

وقتی این اتفاق می‌افتد، با دریافت اطلاعات ورود جدید از کاربر و ارسال آن به 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 CLI، حساب‌های کاربری را از یک فایل به پروژه Firebase خود وارد کنید. برای مثال:

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