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

NextAuth GoogleProvider回调函数未执行问题求助

问题根源:回调位置放错了

你把signIn回调嵌套进了GoogleProvider的配置对象里,但NextAuth的全局回调(比如signIn、session)是直接挂载在authOptions的顶层callbacks属性下的,不是某个provider的子属性。provider内部的callbacks只用于该provider专属的OAuth流程钩子(比如自定义授权URL参数),根本不会触发你写的signIn逻辑。

修正后的代码
import NextAuth from 'next-auth';
import GoogleProvider from 'next-auth/providers/google';

export const authOptions = {
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
      // 这里只放provider专属配置,不要全局回调
    }),
  ],
  // 全局回调放在这里!
  callbacks: {
    async signIn({ account, profile }) {
      console.log('signIn回调触发了');
      // 如果只想针对Google做逻辑判断,加个条件
      if (account.provider === 'google') {
        // 你的Google专属验证逻辑
        return true;
      }
      return true;
    },
  },
  secret: process.env.NEXTAUTH_SECRET,
};
export default NextAuth(authOptions);
额外注意事项
  • console.log的输出会出现在服务器端控制台(比如你启动Next.js的终端),不是浏览器的开发者工具控制台,别找错地方。
  • 如果要拒绝登录,返回false后,NextAuth会默认跳转到/auth/error页面,你也可以在signIn回调里返回一个URL字符串,指定跳转的错误页。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:15:11