[英]Express res.redirect redirect not working as expected
我有一个快速应用程序。 我正在添加一个中间件,如果令牌无效,它会将用户重定向到注销。
export async function validateAuthTokenMiddleware(
req: Request,
res: Response,
next: NextFunction,
): Promise<NextFunction | void> {
try {
const { context } = req;
await validateToken(context);
next();
} catch (err) {
logoutAndRedirectUser(res);
}
}
logoutAndRedirectUser
的代码
const logoutUser = (res: Response) => {
res.clearCookie('my_token')
res.format({
json: () =>
res.status(401).json({
errors: [
{
message: 'You must login to see this',
errorCode: '0001',
},
],
extensions: {
location: location,
},
}),
html: () => res.redirect(302, location),
default: () => res.redirect(302, location),
});
};
我像这样在我的路线中使用这个中间件。 来自客户端的所有 api 请求都通过以下路线:
router.use('/api', validateAuthTokenMiddleware, graphql);
但是重定向没有按预期工作。
/api
调用只看到 401,并且浏览器仍然在同一页面上。 res.redirect(302, '/login') 没有被触发。logoutUser
只发送res.redirect(302, '/login')
而不是 res.json。 还是不行。我的浏览器发出简单的请求
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,...
这意味着application/json
是可接受的(因为*/*;q=0.8
),因此选择了您的 json 响应,这不是重定向。 也许重新排序res.format
中的选择会有所帮助。
你写了:
我尝试重构 logoutUser 只发送 res.redirect(302, '/login') 而不是 res.json。 还是不行。
您也可以分享您的重构代码吗?
我最终为我的客户代码设置了一个条件。 如果收到 401,则重定向到登录页面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.