我的节点JS应用程序涉及在登录时将Jason Web令牌设置为响应标头,以便在访问受限页面时可以使用此JWT来验证用户。
我的问题是如何使此标头保持不变。目前,我正在使用以下代码在注册和登录路径中设置标头:
// Login Handle
router.post("/login", async (req, res, next) => {
const user = await User.findOne({ email: req.body.email });
if (!user) return res.status(400).send("Email or password is incorrect");
const validPassword = await bcrypt.compare(req.body.password, user.password);
if (!validPassword) return res.status(400).send("Invalid email or password.");
const token = user.generateAuthToken();
res.set('x-auth-token', token).redirect('/dashboard');
});
这是我要开始工作的身份验证中间件:
function auth(req, res, next) {
const token = req.header('x-auth-token');
if(!token) return res.status(401).send("Access denied. No token provided");
// if the token is valid it will return the decoded payload
try {
const decoded = jwt.verify(token, jwtPrivateKey);
req.user = decoded;
next();
}
catch(ex) {
res.status(400).send("Invalid token.");
}
我可以在chrome dev工具的“网络”标签中看到,使用JWT正确设置了标头。但是,只要刷新页面或访问其他页面,标题就会消失。
我是否需要在每条路线上使用res.set('x-auth-token', token).render('foo')
?看来这不是一个很好的解决方案。
谁能告诉我我做错了什么?