一切都工作得很好,一个问题是,当我登录时,我被重定向到“/”页面,如果用户想去“/登录”或“/注册”页面,即使在登录后,他们应该被重定向到“/”页面,我怎么能在这段代码中添加该功能,现在我可以得到“/登录”页面甚至登录后,但页面说localhost重定向你太多次错误的网页。
middleware.js代码:
import { NextResponse } from "next/server";
import { verify } from "jsonwebtoken";
export function middleware(request) {
const secret = process.env.JWT_SECRET;
const jwt = request.cookies.get("jwt")?.value;
const path = request.nextUrl.pathname;
if (!jwt && !["/login", "/register"].includes(path)) {
return NextResponse.redirect(new URL("/login", request.url));
} else if (jwt && (path === "/login" || path === "/register")) {
try {
verify(jwt, secret);
return NextResponse.redirect(new URL("/", request.url));
} catch (error) {
return NextResponse.redirect(new URL("/login", request.url));
}
}
return NextResponse.next();
}
export const config = {
matcher: ["/dashboard/:path*", "/login", "/register", "/"],
};
我尝试使用JWT验证和NextJs成功登录和注册
1条答案
按热度按时间zc0qhyus1#
verify(jwt, secret)
失败了这是抛出错误。因此,您正在运行catch
块。在catch块中,您再次被重定向到“login”。所以,你打因为
jwt
是有效的,而path==="/login"
是有效的。因为verify
抛出错误,所以你碰到了catch块,所以你有点处于循环中