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

Next.js项目部署后NextAuth登录出现401错误,本地正常

NextAuth Credentials Provider 生产环境401错误排查方案

针对本地认证流程正常、生产环境登录触发401并跳转到https://sub.domain.com/api/auth/error?error=的问题,以下是具体排查和修复步骤:

1. 强制检查环境变量配置

生产环境绝对不能使用默认密钥,这是JWT签名验证失败的高频原因:

  • 确保NEXTAUTH_SECRET和JWT_SECRET已配置为强随机字符串(可通过openssl rand -hex 32生成),两者值建议保持一致(NextAuth会优先读取jwt.secret)。
  • 验证APP_URL生产环境值:必须是完整的生产域名(如https://sub.domain.com),且协议为https(生产环境禁用http)。

2. 修复内部API调用逻辑

当前通过APP_URL拼接内部API地址,生产环境可能因网络或跨域问题导致请求失败,进而触发authorize报错:
将axios请求改为相对路径,无需依赖外部域名:

// 原代码
await axios.post(`${process.env.APP_URL}/api/auth/admin/login`, credentials)
// 修改后
await axios.post('/api/auth/admin/login', credentials)

服务器端调用内部API时,相对路径会直接指向当前项目的API路由,避免环境变量配置错误。

3. 完善错误处理逻辑

当前authorize方法中,若axios请求失败且返回数据无message字段,会抛出undefined错误,导致NextAuth无法传递具体错误信息:
修改错误抛出逻辑,添加兜底默认值:

catch (err) {
  const errorMsg = (err as AxiosError<{ message: string }>).response?.data.message || '登录验证失败,请检查账号信息'
  throw new Error(errorMsg)
}

修改后错误页面URL会携带具体错误信息,便于定位问题。

4. 临时开启Debug模式排查

将debug配置改为true,查看生产环境NextAuth日志,获取认证流程的详细输出:

debug: true, // 排查完成后改回false

日志会输出authorize是否成功、JWT生成状态、session回调异常等关键信息。

5. 移除不必要的Adapter配置

你使用的是Credentials Provider,认证逻辑依赖自定义API,PrismaAdapter未参与核心流程,若生产环境Prisma连接异常可能间接影响认证:
暂时注释adapter配置,测试登录是否恢复正常:

// adapter: PrismaAdapter(prisma), // 注释后测试

6. 验证回调函数数据完整性

检查jwt和session回调:

  • 确保自定义API返回的user/room对象包含id和role字段(否则会导致token缺失关键信息)。
  • 确认signIn回调始终返回true(当前配置已满足,但需排查无隐藏逻辑干扰)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:40:52