NextAuth登录报错:(0 , next_auth_react__WEBPACK_IMPORTED_MODULE_3__.signIn)不是函数
解决NextAuth登录时报TypeError: signIn is not a function的问题
问题原因
你在Server Action文件login.ts里,错误使用了客户端版本的signIn方法(来自next-auth/react),但Server Action必须使用从项目自身auth.ts导出的服务器端signIn,两者不能混用。
修复方案
1. 修正login.ts的导入
打开login.ts,替换错误的signIn导入,改用项目内auth.ts导出的版本:
// 在login.ts顶部添加正确导入(路径根据你的项目结构调整) import { signIn } from "@/auth";
同时删除任何从next-auth/react导入signIn的代码。
2. 确认auth.ts的导出正确性
你的auth.ts已经正确导出了服务器端的signIn,这部分无需修改:
export const { handlers: {GET, POST}, auth, signIn, signOut } = NextAuth({ adapter: PrismaAdapter(db), session: { strategy: "jwt" }, ...authConfig, })
3. 恢复安全验证逻辑
你当前注释掉了bcrypt密码比对逻辑,这会导致任何密码都能通过验证,存在严重安全风险,建议恢复:
// 在auth.config.ts的authorize函数中恢复 const passwordsMatch = await bcrypt.compare(password, user.password); if(passwordsMatch) return user; // 替换原有的if(password)判断
补充说明
清空数据库、停用bcrypt这类操作和本次导入错误无关,所以无法解决问题。核心是要区分NextAuth的客户端方法和服务器端方法的使用场景:客户端组件用next-auth/react的signIn,Server Action或服务器端函数用自己auth.ts导出的signIn。
内容的提问来源于stack exchange,提问作者Stykgwar
相关产品推荐
相关产品推荐

