You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 06:27:33