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

Vercel生产环境下Next-Auth凭证登录Token始终为null求助

解决方案:Vercel生产环境Next-Auth getToken返回null问题

1. 确保NEXTAUTH_URL正确配置

在Vercel环境变量中必须显式设置NEXTAUTH_URL,值为你的生产环境完整域名(比如https://your-app.vercel.app或自定义域名https://yourdomain.com),不能依赖默认值。Vercel的process.env.NEXTAUTH_URL有时无法自动正确生成,会导致Cookie域名匹配失败。

2. 完善Cookie的Domain配置

生产环境下,Cookie需要指定正确的Domain才能被后端路由识别。修改auth.ts中的Cookie配置,添加domain选项:

cookies: {
  sessionToken: {
    name: isProduction ? '__Secure-next-auth.session-token' : 'next-auth.session-token',
    options: {
      httpOnly: true,
      sameSite: 'lax',
      path: '/',
      secure: isProduction,
      maxAge: 60 * 30, // 30 minutes
      // 添加Domain配置
      domain: isProduction ? '.vercel.app' : undefined, // 自定义域名改为'.yourdomain.com'
    }
  }
},

注意:自定义域名需使用顶级域名前缀(如.example.com),确保所有子域名可共享Cookie;Vercel默认域名用.vercel.app即可。

3. 优化getToken参数配置

在protectRoute.js中,确保getToken参数完整,可添加raw: true强制解析原始Cookie:

const token = await getToken({ 
  req, 
  secret: process.env.NEXTAUTH_SECRET,
  raw: true // 强制读取原始Cookie字符串
})

同时可添加调试日志,确认请求头中是否包含会话Token:

console.log('Request Cookie:', req.headers.cookie); // 生产环境可在Vercel日志中查看

4. 验证JWT与Session配置一致性

确认auth.ts中jwt和session的maxAge完全一致,避免Token提前过期。同时确保Vercel环境变量中的NEXTAUTH_SECRET与本地完全相同,任何字符差异都会导致Token解析失败。

5. 禁用Edge Runtime(若启用)

如果你的API路由使用了Edge Runtime,可能会导致Cookie解析异常。可在API路由文件顶部添加:

export const runtime = 'nodejs';

强制使用Node.js运行时,确保getToken能正常读取Cookie。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:55:57