Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

在Firebase中管理用戶

創建一個用戶

您可以在Firebase項目中通過調用CreateUserWithEmailAndPassword方法來創建新用戶,或者使用聯合身份提供者(例如Google Sign-InFacebook Login)首次登錄用戶

您還可以從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);
    }
  }
}

void OnDestroy() {
  auth.StateChanged -= AuthStateChanged;
  auth = null;
}

通過使用偵聽器,可以確保在獲得當前用戶時,Auth對像不處於中間狀態(例如初始化)。

您還可以通過調用CurrentUser獲得當前登錄的用戶。如果未登錄用戶,則CurrentUser返回null。

保留用戶的憑證

用戶登錄後,用戶的憑據將存儲在本地密鑰庫中。可以通過註銷用戶來刪除用戶憑據的本地緩存。密鑰庫是特定於平台的:

獲取用戶的個人資料

要獲取用戶的配置文件信息,請使用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方法更新用戶的基本個人資料信息(用戶的顯示名稱和個人資料照片URL)。例如:

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 CLI的auth:import命令將用戶帳戶從文件導入到Firebase項目中。例如:

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