我刚刚使用NextAuth在本地托管的NextJS应用程序中实现了电子邮件/密码身份验证。当我创建中间件来保护路由时,每当我单击注销按钮时,我都会收到错误“localhost redirected you too many times”。x1c 0d1x
这是我的middleware.ts
文件:
import { NextRequest, NextResponse } from 'next/server'
export default async function middleware(req: NextRequest) {
const path = req.nextUrl.pathname;
const session = await getToken({
req,
secret: process.env.NEXTAUTH_SECRET,
});
if (!session) {
return NextResponse.redirect(new URL('/login', req.url))
} else if (session && (path === '/login' || path === '/signup')) {
return NextResponse.redirect(new URL('/', req.url))
}
return NextResponse.next()
}
有没有一种方法可以保护所有的路由,而不需要中间件,或者不需要重定向就可以实现功能?
1条答案
按热度按时间vyswwuz21#
这是因为你只写了一个条件(!session)的if,然后总是重定向到同一个路由(/login),导致太多的重定向到同一个路由。
要解决此问题,请将if更改为
!session && path !== "/login"