You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next Auth报错:不支持Credentials提供者回调,Lightsail生产环境登录失败

Next.js生产站点登录报错:Next Auth - Error: Callback for provider type credentials not supported

部署在Lightsail上的Next.js生产站点,除登录功能外所有路由正常运行,但登录时触发错误提示:Next Auth - Error: Callback for provider type credentials not supported。

相关代码(auth/[...nextauth]/route.ts):

import NextAuth from 'next-auth';
import CredentialsProvider from 'next-auth/providers/credentials';
import axios from 'axios';

const handler = NextAuth({
    providers: [
        CredentialsProvider({
            name: 'Credentials',
            credentials: {
                email: {},
                password: {},
            },
            async authorize(credentials, req) {
                console.log('api url: ', process.env.NEXT_PUBLIC_API_BASE_URL);
                try {
                    const res = await axios.post(
                        `${process.env.NEXT_PUBLIC_API_BASE_URL}/auth/login`,
                        {
                            email: credentials?.email,
                            password: credentials?.password,
                        }
                    );
                    return res.data;
                } catch (err: any) {
                    if (
                        err?.response?.data &&
                        err?.response?.data.errorType === 'emailVerification'
                    ) {
                        throw new Error(JSON.stringify(err?.response?.data));
                    } else {
                        throw new Error(
                            err?.response?.data?.message || 'unable to login'
                        );
                    }
                }
            },
        }),
    ],
    pages: {
        signIn: '/login',
    },
    callbacks: {
        async jwt({ user, token }: { user: any; token: any }) {
            if (user) {
                return { token: user.token, user: user.data };
            } else {
                return { token: token.token, user: token.user };
            }
        },
        async session({ session, token }: { session: any; token: any }) {
            session.user = {
                ...token.user,
                accessToken: token.token,
            };
            return session;
        },
    },
});

export { handler as GET, handler as POST };

可能的解决方案:

  • 确认NextAuth版本兼容性:确保next-auth与CredentialsProvider的版本一致,避免版本不兼容导致的回调支持问题。
  • 规范authorize函数返回值:authorize需返回包含用户唯一标识(如id)的对象,或验证失败时返回null。当前直接返回res.data可能不符合NextAuth预期,建议调整:
    // 假设res.data.data包含用户信息,补充唯一标识字段
    return {
      id: res.data.data.id,
      ...res.data.data,
      token: res.data.token
    };
    
  • 检查登录页面的signIn调用:在自定义登录页/login中,调用signIn时需明确指定provider为"credentials":
    await signIn("credentials", {
      email: emailValue,
      password: passwordValue,
      redirect: true
    });
    
  • 验证生产环境变量:确保Lightsail环境中NEXT_PUBLIC_API_BASE_URL配置正确,避免axios请求失败引发认证流程异常。
  • 调整jwt回调逻辑:当前jwt回调返回的结构偏离NextAuth标准,建议修改为:
    async jwt({ user, token }) {
      if (user) {
        token.accessToken = user.token;
        token.user = user.data;
      }
      return token;
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:05:08