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

Next.js 13无法识别认证路由返回404错误,如何解决?

NextAuth认证路由404错误排查求助

我正在开发一个基于Next.js v13、以Strapi v4为后端的项目,网站、登录页和仪表盘采用独立布局。登录模块使用NextAuth实现认证,但提交登录表单时,系统无法识别认证路由,重定向至http://localhost:3000/api/auth/error并返回GET http://localhost:3000/api/auth/error 404 (Not Found)错误。多方搜索仍未找到解决方案,希望得到帮助。


关键代码片段

登录表单提交逻辑

const onSubmit = async (e) => {
  e.preventDefault();
  const result = await signIn('credentials', {
    redirect: false,
    email: e.target.email.value,
    password: e.target.password.value,
  });
  if (result.ok) {
    router.replace('/');
    return;
  }
  alert('Credential is not valid');
};

[...nextauth].js 配置文件

import NextAuth from 'next-auth';
import CredentialsProvider from 'next-auth/providers/credentials';
import { signIn } from '../../../../services/auth';

export default NextAuth({
  providers: [
    CredentialsProvider({
      name: 'Sign in with Email',
      credentials: {
        email: { label: 'Email', type: 'text' },
        password: { label: 'Password', type: 'password' },
      },
      async authorize(credentials, req) {
        
        if (credentials == null) return null;
       
        try {
          const { user, jwt } = await signIn({
            email: credentials.email,
            password: credentials.password,
          });
          return { ...user, jwt };
        } catch (error) {
          // Sign In Fail
          return null;
        }
      },
    }),
  ],
  callbacks: {
    session: async ({ session, token }) => {
      session.id = token.id;
      session.jwt = token.jwt;
      return Promise.resolve(session);
    },
    jwt: async ({ token, user }) => {
      const isSignIn = user ? true : false;
      if (isSignIn) {
        token.id = user.id;
        token.jwt = user.jwt;
      }
      return Promise.resolve(token);
    },
  },
});

auth.js(Strapi登录请求封装)

import axios from 'axios';

const strapiUrl = process.env.NEXT_PUBLIC_STRAPI_API_URL;

export async function signIn({ email, password }) {
  const res = await axios.post(`${strapiUrl}/api/auth/local`, {
    identifier: email,
    password,
  });
  return res.data;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:37:04