我可以使用 Firebase Admin SDK for Node 重置用户密码吗?

Posted

技术标签:

【中文标题】我可以使用 Firebase Admin SDK for Node 重置用户密码吗?【英文标题】:Can I reset a user's password using the Firebase Admin SDK for Node? 【发布时间】:2018-03-06 09:30:43 【问题描述】:

Firebase 的文档建议 API 提供与控制台相同的功能:

访问 Firebase 控制台来管理您的 Firebase 用户并不总是很方便。管理员用户管理 API 为这些相同的用户提供编程访问。它甚至允许您执行 Firebase 控制台无法执行的操作,例如检索用户的完整数据以及更改用户的密码、电子邮件地址或电话号码。

但是参考文档没有列出重置用户密码的功能。我错过了什么吗?

【问题讨论】:

【参考方案1】:

编辑:此答案现已过时,有关如何通过 Firebase SDK 发送密码重置链接,请参阅下面 Andrea 的答案。

这取决于您使用的“重置”的定义。

如果您的意思是“更改”中的重置,那么可以 - the updateUser function 允许您提供新密码。请参阅文档中的以下示例:

admin.auth().updateUser(uid, 
  email: "modifiedUser@example.com",
  phoneNumber: "+11234567890",
  emailVerified: true,
  password: "newPassword",
  displayName: "Jane Doe",
  photoURL: "http://www.example.com/12345678/photo.png",
  disabled: true
)
  .then(function(userRecord) 
    // See the UserRecord reference doc for the contents of userRecord.
    console.log("Successfully updated user", userRecord.toJSON());
  )
  .catch(function(error) 
    console.log("Error updating user:", error);
  );

另一方面,如果您的意思是“发送密码重置电子邮件”中的重置,那么不,似乎没有通过 Admin SDK 执行此操作的简单方法。

【讨论】:

我很惊讶这个选项 - 以纯文本形式编辑密码 - 甚至在那里。对我来说,这似乎不是一个可信的重置场景,这就是为什么我认为我错过了一些东西,但我猜不是。 @OliverLloyd:是的,这似乎是一个奇怪的遗漏。 @OliverLloyd:跟进 - this question 的答案可能适合您的需求,因为标准客户端 API 允许您发送密码重置电子邮件。 @JoeClay 所以我认为在这种情况下,在存储密码之前加密/hashWithSalt 取决于我们,并且是良好的做法?我正在使用电话身份验证来登录我的用户,然后在电话验证成功后提示他们创建密码作为额外的安全级别。 我认为这会导致它在 Firebase 服务器上被双重哈希,这会阻止人们登录。但不确定!【参考方案2】:

是的,你可以。要生成密码重置链接,您需要提供现有用户的电子邮件。然后,您可以使用任何您喜欢的电子邮件服务来发送实际的电子邮件。 Link to documentation.

// Admin SDK API to generate the password reset link.
const userEmail = 'user@example.com';
admin.auth().generatePasswordResetLink(userEmail, actionCodeSettings)
  .then((link) => 
    // Construct password reset email template, embed the link and send
    // using custom SMTP server.
    return sendCustomPasswordResetEmail(email, displayName, link);
  )
.catch((error) => 
  // Some error occurred.
);

【讨论】:

以上是关于我可以使用 Firebase Admin SDK for Node 重置用户密码吗?的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Cloud Storage Java Admin SDK 使用 contentType 上传文件

Firebase Admin SDK sendToTopic 不起作用

使用 node.js admin sdk 创建令牌时的 Firebase REST 身份验证

Firebase Admin SDK、FCM 云消息传递

如何将 firebase 的 firestore/admin sdk 与 next.js 一起使用

如何使用 firebase admin sdk 列出所有用户