Next.js+next-auth部署Vercel时unstable_getServerSession报504超时
解决Next.js+NextAuth部署Vercel后504超时问题
常见原因及修复步骤
1. 环境变量配置不全/错误
本地开发时.env里的变量要完整同步到Vercel平台:
- 登录Vercel控制台,进入你的项目,在Settings → Environment Variables中检查:
NEXTAUTH_URL必须设置为生产环境域名(比如https://your-project.vercel.app),不能用localhost- 数据库连接字符串、OAuth服务商密钥(如
GOOGLE_CLIENT_ID)等所有依赖变量都要正确配置,且为生产环境有效值
2. 替换过时的unstable_getServerSession
NextAuth v4.20.0后unstable_getServerSession已废弃,改用稳定版getServerSession:
- 先升级NextAuth到最新版本:
npm update next-auth - 修改页面代码中的导入和调用:
// 原代码 import { unstable_getServerSession } from "next-auth/next"; // 替换为 import { getServerSession } from "next-auth/next"; // getServerSideProps中调用也替换 const session = await getServerSession(context.req, context.res, authOptions);
3. 优化authOptions中的异步逻辑
如果用credentials认证,检查authorize函数的性能:
- 确保数据库查询有合适的索引,避免慢查询
- 若使用远程数据库,确认Vercel的IP已加入数据库白名单(部分云数据库需要配置)
- 避免在
authorize中执行不必要的复杂操作,减少请求耗时
4. 调整Vercel函数超时设置
Vercel Serverless函数默认超时10秒(免费版上限10秒,付费版30秒),若必要可延长超时:
在项目根目录创建vercel.json文件:
{ "functions": { "pages/api/**/*.js": { "maxDuration": 10 // 根据实际情况调整,免费版最高10 } } }
优先优化代码性能,而非依赖延长超时
5. 统一Node版本
Vercel默认Node版本可能与本地不一致,导致兼容问题:
在项目根目录创建.nvmrc文件,指定和本地一致的Node版本,比如:
v18.17.0
6. 查看Vercel函数日志定位问题
登录Vercel控制台,进入Functions页面,查看对应页面的函数日志,找到具体的超时触发点(比如数据库连接失败、API调用超时等),针对性修复
内容的提问来源于stack exchange,提问作者Ahmed Mohammed
相关产品推荐
相关产品推荐

