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
相关产品推荐
相关产品推荐

