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

NextAuth GoogleProvider登录报错:OAUTH_CALLBACK_ERROR(checks.state缺失)

NextAuth v4.18.8 GoogleProvider 回调错误:checks.state argument is missing

问题背景

JS全栈项目使用NextAuth v4.18.8的GoogleProvider实现登录,今早功能正常运行过一次,提交代码后出现回调错误。已确认env.local中GOOGLE_CLIENT_ID和GOOGLE_CLIENT_SECRET配置正确,且删除重建过Google凭证,问题依旧。

错误日志

[next-auth][error][OAUTH_CALLBACK_ERROR] 
https://next-auth.js.org/errors#oauth_callback_error checks.state argument is missing {
  error: TypeError: checks.state argument is missing
      at Client.callback (.../openid-client/lib/client.js:387:13)
      at oAuthCallback (.../next-auth/core/lib/oauth/callback.js:127:29)
      ...(省略后续栈信息)
  name: 'OAuthCallbackError',
  code: undefined
},
providerId: 'google',
message: 'checks.state argument is missing'

网络请求异常

点击Google账号授权后:

  • consent?authuser=0&part=.... 返回302
  • google?state=...... 返回302
  • http://127.0.0.1:3000/api/auth/error?error=OAuthCallback 返回302并报错
  • http://127.0.0.1:3000/api/auth/signin?error=OAuthCallback 返回404

相关代码

登录按钮函数:

const handleGoogleLogin = async () => {
    await signIn('google', {
        redirect: true,
        callbackUrl: 'http://127.0.0.1:3000/user/dashboard'
    })
}

[...nextauth].js:

export const authOptions = {
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET
    })
  ],
  session: { strategy: "jwt" }, 
  jwt: { secret: process.env.JWT_TOKEN },
  adapter: MongooseAdapter(process.env.MONGODB_URI),
}
export default NextAuth(authOptions)

解决方案

1. 验证Google控制台回调URL配置

进入Google Cloud控制台的API和服务 -> 凭据,找到对应OAuth客户端ID,确保已添加完全匹配的回调URL:
http://127.0.0.1:3000/api/auth/callback/google
注意:必须和项目运行地址一致,不要混用localhost和127.0.0.1。

2. 统一项目访问地址

本地开发全程使用http://127.0.0.1:3000访问项目,signIn的callbackUrl也保持相同域名,避免跨域或Cookie不匹配问题。

3. 调整NextAuth Cookie配置

在authOptions中添加Cookie配置,确保state参数对应的Cookie能被正确携带:

export const authOptions = {
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET
    })
  ],
  session: { strategy: "jwt" }, 
  jwt: { secret: process.env.JWT_TOKEN },
  // 新增Cookie配置
  cookies: {
    sessionToken: {
      name: `next-auth.session-token`,
      options: {
        httpOnly: true,
        sameSite: 'lax',
        path: '/',
        secure: process.env.NODE_ENV === 'production'
      }
    },
    callbackUrl: {
      name: `next-auth.callback-url`,
      options: {
        sameSite: 'lax',
        path: '/',
        secure: process.env.NODE_ENV === 'production'
      }
    },
    csrfToken: {
      name: `next-auth.csrf-token`,
      options: {
        httpOnly: true,
        sameSite: 'lax',
        path: '/',
        secure: process.env.NODE_ENV === 'production'
      }
    }
  },
  // 暂时注释适配器测试
  // adapter: MongooseAdapter(process.env.MONGODB_URI),
}
export default NextAuth(authOptions)

4. 清除缓存并重启服务

  • 清除浏览器中127.0.0.1域名下的所有Cookie和缓存
  • 关闭当前Next.js开发服务器,重新执行npm run dev启动

5. 排查适配器影响

暂时注释掉adapter配置,重新启动服务测试登录。如果恢复正常,说明MongoDB适配器可能存在连接问题或版本兼容性问题,需要检查MongoDB URI是否正确,或更新MongooseAdapter版本。

内容的提问来源于stack exchange,提问作者João Textor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:55:17