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

Node.js集成Phone Email电话认证:提交OTP后未收到Token

问题排查与解决建议

你当前的核心问题是:Phone Email完成OTP验证后,重定向到/auth端点时未携带token参数,导致无法获取验证后的手机号。以下是具体排查和修复步骤:

1. 先确认回调URL的参数情况

直接查看浏览器跳转后的地址栏,比如访问http://localhost:3000/auth时,地址栏是否带有?token=xxxxxx这类后缀。如果没有,说明Phone Email的回调逻辑未传递token,优先检查:

  • 确认Phone Email后台配置的**回调地址(redirect_url)**与你process.env.REDIRECT_URL的值完全一致,包括协议(http/https)、端口、路径,不能有任何差异(比如后台配置是http://localhost:3000/auth,代码里就不能写成http://localhost:3000)。
  • 查阅Phone Email官方文档,确认回调时传递认证信息的参数名是否为token,部分服务可能使用auth_token、jwt_token这类命名,若参数名不符,req.query.token自然无法获取到值。

2. 修复手机号参数的硬编码问题

你构造phoneSignInUrl时,将phone_no设为process.env.PHONE_NO,这是错误的——该参数应让用户在Phone Email的弹窗中输入,而非使用固定的环境变量值。硬编码会导致所有用户共用同一个手机号走流程,甚至可能干扰Phone Email的回调逻辑,直接移除这个参数:

// 修改后的URL构造代码
const phoneSignInUrl = `https://www.phone.email/auth/sign-in?countrycode=${queryParams.countryCode}&redirect_url=${queryParams.redirectUrl}`;

3. 增加调试日志确认参数

在/auth端点中添加日志,打印所有收到的查询参数,明确Phone Email实际传递的内容:

app.get('/auth', (req, res) => {
  // 新增调试日志,查看所有查询参数
  console.log('回调收到的参数:', req.query);
  try {
    const token = req.query.token;
    // 原代码逻辑...
  } catch (error) {
    // 原代码逻辑...
  }
});

启动服务后测试,根据控制台输出的参数调整代码中的取值逻辑。

4. 验证JWT配置(后续拿到token后)

若后续成功获取到token,需确认process.env.API_KEY是Phone Email提供的正确签名密钥,且算法HS256与官方要求一致,否则会出现JWT验证失败的情况。

内容的提问来源于stack exchange,提问作者Ved

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:13:19