如果 Laravel 的身份验证令牌无效,我尝试将用户重定向到 /login。因此,我尝试获取用户,如果 resp.ok() 为 false,则删除无效的“令牌”cookie 并将用户重定向到 /login。但我的浏览器中不断出现错误。
这是关于下面代码示例中的第三个 if 语句。
错误:页面未正确重定向 Firefox 已检测到 服务器正在以以下方式重定向对此地址的请求 永远不会完成。此问题有时可能是由于禁用 或拒绝接受cookies。
import { NextResponse } from "next/server";
import type { NextRequest } from "next/server";
export async function middleware(req: NextRequest) {
// Add protected routes here
const url = req.nextUrl.clone();
if (req.nextUrl.pathname === "/login" && req.cookies.has("token")) {
url.pathname = "/";
return NextResponse.redirect(url);
}
if (
!req.cookies.has("token") &&
req.nextUrl.pathname !== "/login" &&
!req.nextUrl.pathname.startsWith("/_next")
) {
url.pathname = "/login";
return NextResponse.redirect(url);
}
if (req.cookies.has("token")) {
const user = await fetch(`http://10.129.23.206:8080/api/user`, {
headers: {
"Authorization": `Bearer ${req.cookies.get("token")}`,
}
})
console.log(user)
if (!user.ok){
req.cookies.delete("token")
url.pathname = "/login";
return NextResponse.redirect(url)
}
}
}
export const config = {
matcher: ["/", "/create", "/search", "/:slug*", "/login"],
};
我认为获取用户失败,然后在这个
if
块中
if (!user.ok){
req.cookies.delete("token")
url.pathname = "/login";
return NextResponse.redirect(url)
}
您正在删除令牌,之后当您发出另一个没有令牌的请求时,因此此
if
将被执行,并且您将再次重定向到“登录”:
if (
!req.cookies.has("token") &&
req.nextUrl.pathname !== "/login" &&
!req.nextUrl.pathname.startsWith("/_next")
) {
url.pathname = "/login";
return NextResponse.redirect(url);
}
获取用户代码应该是
try/catch
块,并且在catch块中你应该相应地处理错误。也许您将消息发送到浏览器,浏览器将在表单上显示错误而不是再次重定向。