You need to enable JavaScript to run this app. Next.js中使用Next-Auth Credentials模式登录返回401错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Next.js中使用Next-Auth Credentials模式登录返回401错误如何解决

问题原因与修复方案

核心问题1:异步请求未等待返回

你在authorize异步函数中调用axios时没有加await关键字,导致函数不等接口返回结果就直接执行结束,默认返回undefined,NextAuth会直接判定授权失败,返回401状态码。

核心问题2:返回值不符合要求

NextAuth的authorize函数要求授权成功时返回用户信息对象,不是布尔值true,返回true也会被判定为无效凭证。

修正后的代码

修改pages/api/auth/[...nextauth].js中的authorize逻辑如下:

import axios from "axios";
import NextAuth from "next-auth";
import Providers from "next-auth/providers";

export default NextAuth({
    session: {
        jwt: true,
    },
    providers: [
        Providers.Credentials({
          async authorize(credentials) {
            try {
              // 加await等待接口返回
              const response = await axios.post("MY_LOGIN_API", {
                email: credentials.email,
                password: credentials.password,
              });
              const user = response.data;
              // 返回用户对象,不要返回true
              if (user) {
                return user;
              }
              return null;
            } catch (error) {
              console.log(error);
              throw new Error('I will handle this later!');
            }
          },
        }),
    ],
});

其他需要检查的配置项

  • 确认你已经在项目根目录的.env.local文件中配置了NEXTAUTH_SECRET环境变量,该值为任意随机字符串,用于JWT签名校验,缺失会导致授权失败
  • 确认你的Laravel登录接口在账号密码正确时返回2xx状态码,否则axios会进入catch分支抛出错误,同样会触发401
  • 如果你安装的是NextAuth v4版本,需要调整导入和配置语法,你当前的写法仅适配NextAuth v3版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 08:15:05