如何在Firebase自定义邮箱验证处理器中获取请求用户信息(如uid或邮箱)
能否在Firebase自定义邮箱验证处理器中获取用户UID或邮箱?
可以,在Firebase自定义邮箱验证的不同环节都能安全获取用户的UID和邮箱地址,具体分两种场景说明:
1. 发送验证邮件时的自定义逻辑(Cloud Functions)
当你通过Cloud Functions触发自定义邮件发送逻辑(比如用户创建后自动触发),可以直接从触发事件的user对象中提取信息:
const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(); exports.sendCustomVerificationEmail = functions.auth.user().onCreate(async (user) => { // 直接获取用户核心信息 const uid = user.uid; const email = user.email; // 生成自定义验证链接 const actionCodeSettings = { url: 'https://your-app-domain.com/verify-email', handleCodeInApp: true, }; const verificationLink = await admin.auth().generateEmailVerificationLink(email, actionCodeSettings); // 这里替换为你自己的邮件发送逻辑,可携带uid做自定义处理 console.log(`准备给用户 ${uid}(邮箱:${email})发送验证邮件`); });
2. 处理验证链接的后端逻辑
用户点击验证链接后,后端可通过链接中的oobCode参数安全获取用户信息:
exports.verifyEmailEndpoint = functions.https.onRequest(async (req, res) => { const oobCode = req.query.oobCode; try { // 校验验证码并获取用户详情 const actionCodeInfo = await admin.auth().checkActionCode(oobCode); // 提取用户UID和邮箱 const uid = actionCodeInfo.uid; const email = actionCodeInfo.email; // 完成邮箱验证 await admin.auth().applyActionCode(oobCode); res.status(200).send(`用户 ${uid}(邮箱:${email})的邮箱验证成功`); } catch (err) { res.status(400).send(`验证失败:${err.message}`); } });
注意事项
- 不要直接在验证链接的URL中明文传递UID,避免被篡改;通过
oobCode调用checkActionCode是安全的方式,Firebase会验证该验证码的有效性并返回对应的用户信息。 actionCodeInfo对象还包含操作类型、过期时间等额外信息,可根据需求使用。
内容的提问来源于stack exchange,提问作者Richard Kenneth
相关产品推荐
相关产品推荐

