Auth.js v5生产环境Google登录成功后重定向至localhost问题
问题:NextAuth Google登录部署到AWS后重定向至localhost:3000
我的Google登录动作代码
"use server"; import { AuthError } from "next-auth"; import { signIn } from "@/auth"; export const googleLogin = async () => { try { await signIn("google",{ redirectTo: "/", }); } catch (error) { if (error instanceof AuthError) { switch (error.type) { case "OAuthCallbackError": return { error: "Google login failed!" }; default: return { error: "Something went wrong!" }; } } throw error; } };
问题现象
本地环境运行正常,可成功登录。但部署到AWS后,登录成功会自动重定向至https://localhost:3000。
已尝试的无效操作
- 设置环境变量
AUTH_REDIRECT_PROXY_URL=https://www.yourdomain.com - 在
auth.ts中配置重定向逻辑,代码片段如下:
... async signIn({ user, account, profile, email, credentials }) { return true }, async redirect({ url, baseUrl }) { return baseUrl }, ... }
解决步骤
1. 强制设置NEXTAUTH_URL环境变量
部署环境必须配置NEXTAUTH_URL=https://www.yourdomain.com,这是NextAuth识别生产环境域名的核心变量,优先级高于其他重定向配置。
2. 修正auth.ts的redirect逻辑
当前逻辑直接返回baseUrl,未正确处理登录后的目标路径。修改为:
async redirect({ url, baseUrl }) { // 校验并返回合法的重定向地址 if (url.startsWith(baseUrl) || url.startsWith("/")) { return url.startsWith("http") ? url : `${baseUrl}${url}`; } return baseUrl; }
3. 检查AWS代理层配置
如果使用ALB或CloudFront,确保:
- 正确传递
X-Forwarded-Proto、X-Forwarded-Host请求头,Next.js依赖这些头识别真实域名与协议 - 代理层无强制重定向到localhost的规则
4. 更新Google OAuth回调地址
登录Google Cloud Console,确认OAuth客户端的已授权回调地址为https://www.yourdomain.com/api/auth/callback/google,删除残留的localhost地址并保存配置。
5. 移除signIn中的redirectTo参数(可选)
若上述操作无效,可尝试删除signIn调用里的redirectTo: "/",让NextAuth基于NEXTAUTH_URL自动处理重定向。
内容的提问来源于stack exchange,提问作者YAN MING HUANG
相关产品推荐
相关产品推荐

