使用Credentials provider时Next-auth登录卡在/api/auth/providers如何解决
- 补全缺失的NextAuth导入
你的/pages/api/auth/[...nextauth].js首行未导入NextAuth对象,直接调用NextAuth()会触发服务端运行异常,导致请求无限挂起,在文件开头添加导入语句:
import NextAuth from 'next-auth'
- 修正字段拼写错误
authorize方法中获取密码的字段名拼写错误,你写的credentials.passowrd属于拼写错误,正确写法为credentials.password,该错误会导致密码校验逻辑完全失效。 - 修复未定义变量报错
代码中调用的client.close()的client变量未做任何声明和赋值,运行时会抛出ReferenceError,请调整为接收connectDB()返回的连接实例,若你的数据库连接是全局复用不需要手动关闭,直接删除两处client.close()代码即可。 - 修正逻辑运算符错误
用户存在判断的条件使用了按位与符号&,需要替换为逻辑与符号&&:
if (user && (await user.matchPassword(credentials.password)))
- 适配NextAuth v4版本配置(如果你使用的是v4版本)
v4版本已废弃原有v3的配置语法,需要做如下调整:- 调整导入语句:
import NextAuth from 'next-auth' import CredentialsProvider from 'next-auth/providers/credentials'- 调整session配置:
session: { strategy: 'jwt' }- 提供者声明改为直接调用
CredentialsProvider({}),不需要再从Providers对象下取。
完成以上修改后,authorize方法就会正常执行,signIn请求也不会再卡在/api/auth/providers接口。
内容的提问来源于stack exchange,提问作者asobirov
相关产品推荐
相关产品推荐

