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

部署至Vercel后使用NextAuth Credentials Provider登录遇504错误

部署Vercel后NextAuth Credentials Provider登录出现504错误排查思路

问题描述

开发模式下所有功能运行正常,但部署到Vercel平台后,使用NextAuth的Credentials Provider进行登录操作时触发504超时错误。已核对所有配置项,并在Vercel控制面板中配置了全部环境变量,怀疑是后端部署异常或NextAuth配置存在问题。

错误截图:
错误截图1
错误截图2

相关代码

[...nextauth].js

CredentialsProvider({
      name: "Credentials",

      credentials: {
        email: { label: "Email", type: "text" },
        password: { label: "Password", type: "password" },
      },
      async authorize(credentials, req) {
        const payload = {
          email: credentials.email,
          password: credentials.password,
        };
        const res = await fetch(`${process.env.NEXTAUTH_URL}/api/auth/signin`, {
          method: "POST",
          body: JSON.stringify(payload),
          headers: { "Content-Type": "application/json" },
        });

        const user = await res.json();

        if (res.ok && user) {
          return user;
        }

        return null;
      },
    }),
  ],
  callbacks: {
    async signIn({ user, account, profile, email, credentials }) {},
    async jwt({ token, user }) {
      return { ...token, ...user };
    },
    async session({ session, token, user }) {
      session = token;
      return session;
    },
  },
  pages: {
    signIn: "/auth/signin",

/auth/signin.js

<button
          className="border-2 w-[200px] h-[40px] uppercase"
          onClick={(e) => {
            e.preventDefault();
            signIn("credentials", {
              email: emailRef.current,
              password: passwordRef.current,
            });
          }}
        >
          Sign in
        </button>

排查方向与解决方案

1. 循环请求导致超时

你在authorize函数里请求了${process.env.NEXTAUTH_URL}/api/auth/signin,这会触发NextAuth的登录端点,而Credentials Provider的authorize本身就是登录流程的核心环节,直接形成循环请求,触发Vercel的超时限制返回504。

解决办法:
authorize函数应直接调用用户校验逻辑(比如数据库查询、独立的认证API),而非请求NextAuth自身的登录接口。示例:

async authorize(credentials, req) {
  // 直接调用你的用户验证接口或查询数据库
  const res = await fetch("https://your-auth-service.com/verify", {
    method: "POST",
    body: JSON.stringify(credentials),
    headers: { "Content-Type": "application/json" },
  });

  const user = await res.json();

  if (res.ok && user) {
    return user;
  }

  return null;
}

2. Vercel环境变量配置校验

  • 确认NEXTAUTH_URL在Vercel中设置为部署后的实际域名(如https://your-project.vercel.app),开发与生产环境URL不能混用。
  • 检查所有认证相关环境变量(如数据库连接串、API密钥)是否在Vercel的Production环境变量中正确配置,而非仅在Development环境。

3. 优化函数响应时间

Vercel Serverless函数默认超时为10秒,若authorize内的验证逻辑耗时过长,会触发504:

  • 优化后端验证流程,减少响应耗时。
  • 在Vercel项目设置中,将Serverless函数超时时间调整至最大值(60秒)。

4. 查看Vercel函数日志

登录Vercel控制面板,进入项目Functions菜单,查看/api/auth/[...nextauth]函数的执行日志,日志会显示具体错误细节(如请求失败原因、超时触发点),是定位问题的关键依据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:03:10