在 Firebase 中管理用户

创建用户

要在 Firebase 项目中创建新用户,您可以调用 createUserWithEmailAndPassword 方法,或让用户利用联合身份提供方(例如 Google 登录服务或 Facebook 登录服务)完成首次登录。

您还可以转至 Firebase 控制台的“Authentication”(身份验证)部分,在“用户”页面中创建以密码验证身份的新用户,或者利用 Admin SDK 来创建。

获取当前登录的用户

要获取当前用户,建议在 Auth 对象上设置一个观察者:

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    // User is signed in.
  } else {
    // No user is signed in.
  }
});

使用观察者可确保在您获取当前用户时,Auth 对象不会处于中间状态(例如初始化)。当您使用 signInWithRedirect 时,onAuthStateChanged 观察者会等到 getRedirectResult 解析后再触发。

您还可以使用 currentUser 属性来获取当前登录的用户。如果用户并未登录,则 currentUser 为 null:

var user = firebase.auth().currentUser;

if (user) {
  // User is signed in.
} else {
  // No user is signed in.
}

获取用户个人资料

要获取用户的个人资料信息,可使用 User 实例的各个属性。例如:

var user = firebase.auth().currentUser;
var name, email, photoUrl, uid, emailVerified;

if (user != null) {
  name = user.displayName;
  email = user.email;
  photoUrl = user.photoURL;
  emailVerified = user.emailVerified;
  uid = user.uid;  // 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.getToken() instead.
}

获取特定于提供方的用户个人资料信息

要获取从用户已关联的登录服务提供商处检索到的个人资料信息,可使用 providerData 属性。例如:

var user = firebase.auth().currentUser;

if (user != null) {
  user.providerData.forEach(function (profile) {
    console.log("Sign-in provider: " + profile.providerId);
    console.log("  Provider-specific UID: " + profile.uid);
    console.log("  Name: " + profile.displayName);
    console.log("  Email: " + profile.email);
    console.log("  Photo URL: " + profile.photoURL);
  });
}

更新用户的个人资料

您可以使用 updateProfile 方法来更新用户的个人资料基本信息(即用户的显示名和个人资料照片网址)。例如:

var user = firebase.auth().currentUser;

user.updateProfile({
  displayName: "Jane Q. User",
  photoURL: "https://example.com/jane-q-user/profile.jpg"
}).then(function() {
  // Update successful.
}).catch(function(error) {
  // An error happened.
});

设置用户的电子邮件地址

您可以使用 updateEmail 方法来设置用户的电子邮件地址。例如:

var user = firebase.auth().currentUser;

user.updateEmail("user@example.com").then(function() {
  // Update successful.
}).catch(function(error) {
  // An error happened.
});

向用户发送验证邮件

您可以使用 sendEmailVerification 方法向用户发送邮箱地址验证邮件。例如:

var user = firebase.auth().currentUser;

user.sendEmailVerification().then(function() {
  // Email sent.
}).catch(function(error) {
  // An error happened.
});

您可以在 Firebase 控制台的“身份验证”(Authentication) 部分的“电子邮件模板”页面中自定义使用的电子邮件模板。请参阅 Firebase 帮助中心的电子邮件模板

在发送验证电子邮件时,还可以通过一个接续网址传递状态以重定向回应用。

此外,在发送验证电子邮件之前,您可以通过更新 Auth 实例中的语言代码来对该电子邮件进行本地化。例如:

firebase.auth().languageCode = 'fr';
// To apply the default browser preference instead of explicitly setting it.
// firebase.auth().useDeviceLanguage();

设置用户的密码

您可以使用 updatePassword 方法来设置用户的密码。例如:

var user = firebase.auth().currentUser;
var newPassword = getASecureRandomPassword();

user.updatePassword(newPassword).then(function() {
  // Update successful.
}).catch(function(error) {
  // An error happened.
});

发送重设密码电子邮件

您可以使用 sendPasswordResetEmail 方法向用户发送重设密码电子邮件。例如:

var auth = firebase.auth();
var emailAddress = "user@example.com";

auth.sendPasswordResetEmail(emailAddress).then(function() {
  // Email sent.
}).catch(function(error) {
  // An error happened.
});

您可以在 Firebase 控制台的“身份验证”(Authentication) 部分的“电子邮件模板”页面中自定义使用的电子邮件模板。请参阅 Firebase 帮助中心内的电子邮件模板

在发送重设密码电子邮件时,还可以通过一个接续网址传递状态以重定向回应用。

此外,在发送重设密码电子邮件之前,您可以通过更新 Auth 实例中的语言代码来对该电子邮件进行本地化。例如:

firebase.auth().languageCode = 'de';
// To apply the default browser preference instead of explicitly setting it.
// firebase.auth().useDeviceLanguage();

您也可以从 Firebase 控制台发送重设密码电子邮件。

删除用户

您可以使用 delete 方法删除用户帐号。例如:

var user = firebase.auth().currentUser;

user.delete().then(function() {
  // User deleted.
}).catch(function(error) {
  // An error happened.
});

您还可以从 Firebase 控制台的“身份验证”部分的“用户”页面中删除用户。

对用户重新进行身份验证

某些涉及安全的敏感操作(例如删除帐号设置主电子邮件地址更改密码)只能针对最近登录过的用户执行。如果您执行这类操作,而用户上次登录的时间距离现在已过去太久,则操作将失败并显示错误。发生这种情况时,请向用户索取新的登录凭据并将这些凭据传递给 reauthenticateWithCredential,以便对该用户重新进行身份验证。例如:

var user = firebase.auth().currentUser;
var credential;

// Prompt the user to re-provide their sign-in credentials

user.reauthenticateAndRetrieveDataWithCredential(credential).then(function() {
  // User re-authenticated.
}).catch(function(error) {
  // An error happened.
});

导入用户帐号

您可以使用 Firebase CLI 的 auth:import 命令,将用户帐号从文件导入 Firebase 项目中。例如:

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

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面