Vercel部署后NextAuth Google OAuth报OAuthSignin错误,本地正常求助
问题详情
- 本地localhost环境下Google/Facebook登录功能完全正常
- 部署到Vercel后,点击登录抛出错误:
[GET] /api/auth/error?error=OAuthSignin - 已确认环境变量中的Client ID/Secret配置无误
- 已查阅NextAuth官方错误文档,仍未解决问题
相关代码([...nextauth].js)
import NextAuth from "next-auth/next"; import GoogleProvider from "next-auth/providers/google"; import FacebookProvider from "next-auth/providers/facebook"; import { MongoDBAdapter } from "@next-auth/mongodb-adapter"; import clientPromise from "../../../lib/mongodb"; export default NextAuth({ providers: [ GoogleProvider({ clientId: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, authorization: { params: { redirect_uri: "https://theracakecairo.com/api/auth/callback/google", prompt: "consent", scope: "email", }, }, }), FacebookProvider({ clientId: process.env.FACEBOOK_CLIENT_ID, clientSecret: process.env.FACEBOOK_CLIENT_SECRET, authorization: { params: { redirect_uri: "https://theracakecairo.com/api/auth/callback/facebook", prompt: "consent", // access_type: "offline", scope: "email", response_type: "code", }, }, }), ], debug: true, secret: process.env.NEXTAUTH_SECRET, adapter: MongoDBAdapter(clientPromise), callbacks: { async session({ session, token, user }) { session.user._id = user.id; return session; }, }, // session: { // strategy: "database", // maxAge: 30 * 24 * 60 * 60 // } });
排查步骤(针对Vercel部署场景)
检查OAuth平台的授权回调地址
登录Google/Facebook开发者平台,将Vercel部署后的完整回调地址(如https://theracakecairo.com/api/auth/callback/google)添加到「授权重定向URI」列表,确保和代码中(或自动生成的)地址完全一致,包括协议、域名、路径,无拼写错误。本地测试用的localhost地址不能替代生产环境地址。移除硬编码的redirect_uri
代码中手动指定的固定redirect_uri会导致环境不兼容(比如Vercel预览分支域名不同),NextAuth会自动根据当前请求域名生成正确的回调地址,建议删除authorization.params.redirect_uri配置项,让框架自动处理。验证Vercel环境变量加载状态
进入Vercel项目的「Settings」→「Environment Variables」,确认GOOGLE_CLIENT_ID、GOOGLE_CLIENT_SECRET、NEXTAUTH_SECRET等变量已正确设置,且已部署到生产环境(添加变量后需重新部署才能生效)。可通过Vercel函数日志查看变量是否正常读取。添加NEXTAUTH_URL环境变量
在Vercel中设置NEXTAUTH_URL变量,值为你的生产域名(如https://theracakecairo.com),NextAuth依赖该变量生成正确的回调地址和会话URL,避免平台自动检测失效。查看Vercel函数日志
进入Vercel项目的「Functions」→「Logs」,筛选api/auth/[...nextauth]相关日志,开启debug: true后NextAuth会输出详细的OAuth错误细节(如回调地址不匹配、Client验证失败等),帮助精准定位问题。检查MongoDB网络访问权限
部署到Vercel后,MongoDB的IP白名单可能限制了Vercel服务器的访问,需在MongoDB控制台将Vercel的IP段添加到白名单,或临时允许所有IP访问(仅测试用),确保NextAuth能正常连接数据库。
内容的提问来源于stack exchange,提问作者Fouad Hamdy

