Next-Auth谷歌登录报错:非首页触发TypeError问题求助
问题描述
基于Next-Auth实现谷歌账号登录功能,首页执行登录、登出操作均正常,但在其他页面尝试登录时触发如下错误:
TypeError [ERR_INVALID_ARG_TYPE]: The "listener" argument must be of type function. Received an instance of Object
使用的signIn和signOut方法:
await signIn(provider.id, {callbackUrl: "/"}) await signOut({callbackUrl: "/"})
谷歌提供商配置:
GoogleProvider({ clientId: process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID, clientSecret: process.env.NEXT_PUBLIC_GOOGLE_CLIENT_SECRET, authorization: { params: { prompt: 'consent', access_type: 'offline', response_type: 'code', }, }, }),
已在NextAuth配置中设置:
secret: process.env.NEXTAUTH_SECRET
解决方案
- 确认
signIn参数类型:检查其他页面调用signIn时,第一个参数是否为字符串类型的提供商ID(如"google")。若误传provider对象而非provider.id,会直接导致参数类型错误。 - 区分客户端/服务器组件:确保调用
signIn/signOut的组件是客户端组件(Next.js App Router需添加'use client'指令),服务器组件中调用NextAuth客户端方法会触发异常。 - 移除冗余的
response_type参数:谷歌OAuth2默认response_type为code,手动指定该参数可能引发流程冲突,尝试从谷歌提供商配置的authorization.params中删除response_type: 'code'后重新测试。 - 校验环境变量加载:确认
NEXTAUTH_SECRET在所有页面的运行环境中均正确加载,部分页面可能因环境变量未注入导致认证逻辑异常。 - 检查NextAuth版本兼容性:若使用NextAuth v5,
signIn的参数格式有变化(需传入provider对象而非ID),确认你的版本与调用方式匹配。
内容的提问来源于stack exchange,提问作者tcetin
相关产品推荐
相关产品推荐

