Localhost重定向您太多次NextJs 13和JWT验证中间件

mec1mxoz  于 2023-05-22  发布在  其他
关注(0)|答案(1)|浏览(138)

一切都工作得很好,一个问题是,当我登录时,我被重定向到“/”页面,如果用户想去“/登录”或“/注册”页面,即使在登录后,他们应该被重定向到“/”页面,我怎么能在这段代码中添加该功能,现在我可以得到“/登录”页面甚至登录后,但页面说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成功登录和注册

zc0qhyus

zc0qhyus1#

verify(jwt, secret)失败了这是抛出错误。因此,您正在运行catch块。在catch块中,您再次被重定向到“login”。所以,你打

else if (jwt && (path === "/login" || path === "/register"))

因为jwt是有效的,而path==="/login"是有效的。因为verify抛出错误,所以你碰到了catch块,所以你有点处于循环中

相关问题