NextAuth谷歌登录部署后重定向至localhost而非生产域名问题
Next.js + NextAuth 谷歌登录部署后重定向到localhost的解决方法
我基于Next.js开发项目,集成谷歌登录功能时遇到问题:已经在谷歌OAuth 2.0控制台和Amplify环境变量中配置了生产域名,但部署后点击登录,系统仍重定向到http://localhost:3000,而非预设的生产域名。
相关核心代码如下:src/pages/api/auth/[...nextauth].ts:
import NextAuth from 'next-auth'; import GoogleProvider from 'next-auth/providers/google'; export default NextAuth({ providers: [ GoogleProvider({ clientId: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, }), ], secret: process.env.NEXTAUTH_SECRET || process.env.NEXT_PUBLIC_SECRET, });
尝试过在amplify.yml构建阶段添加- echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env,但无效。
关键原因
NextAuth默认自动检测应用URL,但在Amplify这类托管环境中,自动检测机制可能失效,必须显式指定生产环境的NEXTAUTH_URL,同时确保环境变量正确传递到应用。
解决步骤
1. 确认Amplify环境变量配置正确
- 登录Amplify控制台,进入项目 → 环境变量页面
- 确保已添加
NEXTAUTH_URL变量,值为你的生产域名(必须带https://,例如https://your-amplify-app-id.amplifyapp.com) - 确保变量已勾选部署时可用(Amplify默认会让环境变量在构建和运行阶段生效)
2. 修改NextAuth配置,显式指定URL
在src/pages/api/auth/[...nextauth].ts中添加url配置项,强制指定生产环境地址:
import NextAuth from 'next-auth'; import GoogleProvider from 'next-auth/providers/google'; export default NextAuth({ providers: [ GoogleProvider({ clientId: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, }), ], // 显式绑定生产环境URL url: process.env.NEXTAUTH_URL, secret: process.env.NEXTAUTH_SECRET || process.env.NEXT_PUBLIC_SECRET, // 可选:强制统一重定向逻辑 callbacks: { async redirect({ url, baseUrl }) { // 确保所有重定向都使用生产域名 return baseUrl; }, }, });
3. 移除amplify.yml中的冗余命令
不需要执行echo "NEXTAUTH_URL=$NEXTAUTH_URL" >> .env,Amplify会自动将环境变量注入Next.js运行环境,process.env可直接读取。
4. 验证谷歌OAuth重定向URI
登录谷歌OAuth 2.0控制台,确认授权重定向URI已添加生产环境的回调地址:
https://your-production-domain.com/api/auth/callback/google
注意域名必须和NEXTAUTH_URL完全一致,包括https前缀。
5. 重新部署应用
在Amplify控制台触发重新构建部署,确保新配置生效。
额外排查点
- 可在登录页添加
console.log(process.env.NEXTAUTH_URL),验证环境变量是否正确加载 - 确保
NEXTAUTH_SECRET已正确配置,这是NextAuth加密会话的关键,缺失可能导致异常 - 检查浏览器网络请求,确认登录跳转的请求地址是否已替换为生产域名
内容的提问来源于stack exchange,提问作者EQ0920
相关产品推荐
相关产品推荐

