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
相关产品推荐
相关产品推荐

