我尝试从我的站点中的一个路由的url中获取令牌,但是中间件记录了3次令牌,第二次令牌为空,而我记录了请求url,我的url是http://localhost:3000/auth/newPassword,但是第二次呈现的是http://localhost:3000/_next/static/chunks/pages/auth/newPassword.js?ts=1667894719054有人知道这里的问题是什么吗?
我向用户发送了一封电子邮件,要求输入新密码,电子邮件的URL中带有查询令牌。我希望中间件在访问新密码路由之前检查令牌是否有效,然后在那里验证令牌,但在第二次时,令牌对我呈现为空,这使我的项目崩溃
import { NextResponse, NextRequest } from "next/server";
import { verify } from "jsonwebtoken";
const secret = process.env.JWT_SECRET!;
export default async function middleware(req: NextRequest) {
const url = req.url;
const token = await req.nextUrl.searchParams.get("token")!;
const cookies = req.cookies;
if (url.includes("/auth/newPassword")) {
console.log(url);
if (token === undefined) {
return NextResponse.redirect("http://localhost:3000/auth/signin");
}
try {
verify(token, secret);
return NextResponse.next();
} catch (e) {
return NextResponse.redirect("http://localhost:3000/auth/signin");
}
}
}
1条答案
按热度按时间gjmwrych1#
这是因为当你加载
http://localhost:3000/auth/newPassword
时,下一步会向http://localhost:3000/_next/static/chunks/pages/auth/newPassword.js?ts=1667894719054
发出请求(我猜是为了水合),这个文件基本上只包含与javascript相关的内容,你不会认为你的中间件会匹配这个路由,而目前它是(因为它包含auth/newPassword
)。我建议使用带有否定匹配器的中间件: