You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextAuth第三方登录问题(Amplify托管环境)

问题描述

技术栈:Next.js 13.4、Amplify托管(已配置CloudFront)
对应路由文件:/api/auth/[...nextauth]/route.js
代码如下:

const handler = NextAuth({
  providers: [
    ...
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    }),
  ],

  callbacks: {
    async jwt({ token, account }) {
      if (account) {
        token.accessToken = account.access_token;
      }
      return token;
    },
    async session({ session, token }) {
      session.accessToken = token.accessToken;
      return session;
    },
  },
});

export { handler as GET, handler as POST };

本地测试谷歌登录功能正常,但部署到Amplify托管环境后,访问/api/auth/provider路径时出现500错误。

可能的错误原因
  • 生产环境缺失NEXTAUTH_SECRET环境变量:NextAuth在生产环境必须显式配置该变量用于JWT签名,本地开发时会自动生成临时值,但生产环境无此变量会触发内部错误。
  • Amplify未正确配置谷歌登录环境变量:GOOGLE_CLIENT_ID或GOOGLE_CLIENT_SECRET未在Amplify控制台设置,或值与本地不一致。
  • CloudFront缓存策略冲突:CloudFront对/api/*路径进行了缓存,返回过期或错误响应。
  • Amplify的Next.js SSR支持配置异常:Next.js 13.4 App Router的API路由属于SSR范畴,若Amplify未正确启用SSR支持,会导致路由执行失败。
  • OAuth回调URL配置错误:谷歌开发者后台未将Amplify部署后的域名添加到授权重定向URI列表,导致回调失败触发500错误。
解决方案步骤
  1. 补充NEXTAUTH_SECRET环境变量

    • 用openssl rand -hex 32命令生成随机安全字符串
    • 登录Amplify控制台,进入项目「Environment variables」页面,添加NEXTAUTH_SECRET变量并填入生成的字符串
    • 重新触发Amplify构建部署,确保变量生效
  2. 验证Amplify环境变量配置

    • 检查Amplify控制台中GOOGLE_CLIENT_ID和GOOGLE_CLIENT_SECRET的值与本地完全一致,无多余空格或引号
    • 确认变量已添加到所有部署环境(如prod环境)
  3. 调整CloudFront缓存策略

    • 进入CloudFront控制台,找到对应分发的「Behaviors」配置
    • 添加或修改/api/*路径的行为,将「Cache Policy」设置为「CachingDisabled」,避免缓存API路由响应
    • 保存配置并等待CloudFront部署生效
  4. 确认Amplify的Next.js部署配置

    • 检查Amplify控制台「Build settings」:构建命令为npm run build(或yarn build),输出目录为.next
    • 确认Amplify默认支持Next.js 13.4 App Router,若有自定义构建脚本,需确保未破坏SSR逻辑
  5. 排查OAuth回调URL配置

    • 登录谷歌开发者后台,检查OAuth 2.0客户端ID的「已授权的重定向URI」是否包含https://<你的Amplify域名>/api/auth/callback/google
    • 确认重定向URI与NextAuth配置一致(未显式设置callbackUrl时,默认使用当前域名)
  6. 查看错误日志定位具体问题

    • 在Amplify控制台「Deployments」页面,查看对应部署的「Build logs」和「Console logs」,寻找500错误的堆栈信息
    • 若启用CloudFront日志,查看S3存储桶中的访问日志,确认请求是否到达Amplify origin及具体错误响应细节

内容的提问来源于stack exchange,提问作者kroco iam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:16:27