返回
如何在 Cloud Function 中安全地重新验证当前用户:分步指南
javascript
2024-03-25 04:20:34
在 Cloud Function 中重新验证当前用户:分步指南
作为一名开发人员,在需要在不存储用户密码的情况下更新密码时,重新验证当前用户至关重要。使用 Firebase 的身份验证服务,结合 Cloud Functions 的灵活性,让我们深入了解如何在 Cloud Function 中重新验证当前用户。
获取当前用户
在 Cloud Function 中,通过 context.auth.token
属性轻松获取当前用户。它包含有关当前登录用户的详细信息,如电子邮件地址和用户 ID。
const { email, uid: userId } = context.auth.token;
重新验证用户
由于 firebase-admin
SDK 缺乏 signInWithEmailAndPassword
方法,因此我们需要一个替代方案。verifyPassword
方法接受用户 ID 和密码,如果密码正确,将返回 true
。
const isValid = await auth.verifyPassword(userId, currentPassword);
更新密码和发送电子邮件
验证密码后,使用 updateUser
方法更新用户的密码。此外,使用 sendPasswordUpdateEmail
方法发送密码更新电子邮件。
await auth.updateUser(userId, { password: newPassword });
sendPasswordUpdateEmail(email);
完整代码
const { auth, functions } = require("../../services/firebase");
...
exports.updatePassword = functions
.region("us-central1")
.runWith({ memory: "1GB", timeoutSeconds: 120 })
.https.onCall(async (data, context) => {
const { currentPassowrd, newPassword } = data;
const { email, uid: userId } = context.auth.token;
if (!userId) { throw ... }
try {
const isValid = await auth.verifyPassword(userId, currentPassword);
if (!isValid) { throw AuthErrors.incorrectPassword(); }
await auth.updateUser(userId, { password: newPassword });
sendPasswordUpdateEmail(email);
} catch (err) { throw AuthErrors.cannotUpdatePassword(); }
});
常见问题解答
1. 为什么需要重新验证用户?
重新验证对于在不存储用户密码的情况下更新密码至关重要。
2. Cloud Function 中如何使用 verifyPassword
方法?
verifyPassword
接受用户 ID 和密码,如果密码正确,则返回 true
。
3. updateUser
方法用来做什么?
updateUser
方法用于更新用户的密码。
4. 如何发送密码更新电子邮件?
使用 sendPasswordUpdateEmail
方法发送密码更新电子邮件。
5. Cloud Function 中重新验证的好处是什么?
重新验证提供了一种安全的方式来更新密码,同时符合 Firebase 的最佳实践。