Next Auth集成Azure B2C部署后next-auth.callback-url指向localhost问题
问题根源
Next Auth 在部署环境未正确读取到线上域名配置,默认 fallback 到 http://localhost:3000,导致回调地址、Cookie 域名全部指向本地地址。
修复步骤
1. 检查环境变量取值逻辑
你提到所有环境变量都加了NEXT_PUBLIC前缀,首先确认两点:
- 部署平台的环境变量配置中,对应变量(比如
NEXT_PUBLIC_NEXTAUTH_URL)的值为你的完整线上域名,格式为https://你的域名.com,不要加末尾斜杠 - 你的
config文件中,NEXTAUTH_URL的取值和环境变量名完全匹配,不要出现变量名写错的情况,不要硬编码默认值为http://localhost:3000,如果要加默认值也仅在开发环境生效:
// config 文件示例 export const NEXTAUTH_URL = process.env.NODE_ENV === 'development' ? 'http://localhost:3000' : process.env.NEXT_PUBLIC_NEXTAUTH_URL
2. 显式指定 NextAuth 根域名
在你的[...nextAuth.tsx]的NextAuthOptions配置中新增site参数,强制指定根域名,优先级高于环境变量默认读取逻辑:
const options: NextAuthOptions = { site: NEXTAUTH_URL, // 新增这一行 session: { jwt: true, }, // 其余原有配置保持不变 }
3. 修正 redirect 回调(可选,规避安全风险)
你当前的 redirect 回调直接返回传入 url 存在跨站跳转风险,改成官方推荐写法:
callbacks: { redirect: async ({ url, baseUrl }) => { // 仅允许同域跳转 if (url.startsWith('/')) return `${baseUrl}${url}` if (new URL(url).origin === baseUrl) return url return baseUrl }, }
4. 验证配置生效
部署后先清空浏览器原有 Cookie,再重新访问站点,查看next-auth.callback-urlCookie 的值是否已经替换为你的线上域名,如果跳转 OAuth 后报错,再检查 Azure B2C 应用注册的重定向 URI 中是否添加了线上地址https://你的域名.com/api/auth/callback/azureb2c。
内容的提问来源于stack exchange,提问作者syroman
相关产品推荐
相关产品推荐

