Next.js13 App Router:AuthJS在Vercel报504超时本地正常
Vercel部署NextJS时AuthJS邮箱登录挂起的排查与调试
可能的问题原因
- 环境变量不一致:本地的
NEXTAUTH_SECRET、邮箱服务商的API密钥等环境变量,在Vercel后台是否完全匹配?NEXTAUTH_SECRET如果线上没设置或和本地不同,会导致加密流程异常,引发请求挂起。 - 邮箱服务IP限制:部分邮箱服务商(如SendGrid、Mailgun)会屏蔽云平台IP,Vercel服务器的IP可能被拦截,导致邮件发送请求卡住,进而让整个登录流程挂起。
- 回调URL配置错误:
NEXTAUTH_URL必须设置为Vercel部署后的正式域名(带https),如果还是用本地的http://localhost:3000,会导致AuthJS的回调逻辑异常,请求无法完成。 - Serverless函数超时:Vercel的Serverless函数默认超时10秒,如果邮件发送过程耗时超过这个时间,会直接触发超时,表现为请求挂起。
调试方法
- 开启AuthJS调试模式:在AuthJS配置文件(
auth.ts/auth.js)中添加debug: true,这样Vercel日志会输出AuthJS的详细执行流程,能定位到是卡在邮件发送、会话创建还是其他环节。 - 单独测试邮件发送:写一个简单的测试接口(比如
/api/test-email),直接调用邮箱服务发送邮件,部署到Vercel后测试,确认邮件服务本身是否能正常响应。 - 检查Vercel函数完整日志:在Vercel后台找到
/api/auth/signin对应的Serverless函数,查看完整的执行日志,包括请求参数、内部报错(有些未捕获的Promise拒绝不会显示在表面日志里)。 - 本地模拟Vercel环境:用
vercel dev命令在本地模拟Vercel的运行环境,复现线上的挂起问题,方便在本地调试排查。 - 调整函数超时时间:如果是邮件发送耗时导致的超时,在Vercel后台找到该函数的设置,把超时时间适当调高(最大支持15分钟)。
内容的提问来源于stack exchange,提问作者AnonUser456
相关产品推荐
相关产品推荐

