当用户登录时,访问令牌被创建并发送给用户,然后存储在 sessionStorage 中。在此之前的一切正常。我的问题是我不知道如何使用访问令牌来访问受保护的路由。
express app.js(smoothies 是受保护的路由)
app.get('/smoothies', requireAuth, (req, res) => res.render('smoothies'));
authMiddleware.js
const User = require('../models/User');
const requireAuth = (req, res, next) => {
const authHeader = req.headers['authorization']
const token = authHeader && authHeader.split(' ')[1]
// check json web token exists & is verified
if (token) {
jwt.verify(token, 'night of fire', (err, decodedToken) => {
if (err) {
console.log(err.message);
res.redirect('/login?err=auth');
} else {
console.log(decodedToken);
next();
}
});
} else {
res.redirect('/login?err=auth');
}
};
// check current user
module.exports = { requireAuth };
smoothies.ejs
var myHeaders = new Headers();
myHeaders.append("Authorization", `Bearer ${token}`);
var requestOptions = {
method: 'GET',
headers: myHeaders,
redirect: 'follow'
};
fetch("http://localhost:3000/smoothies", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
//Should I be even doing this fetch GET request on smoothie.ejs?
})
Smoothies 是受保护的路线。当我尝试使用 Postman 并使用授权向 (/smoothies) 发送 GET 请求时:不记名令牌,它可以工作并且我能够访问 /smoothies。但是,如果我尝试真正的应用程序,即使我的 sessionStorage 中有访问令牌,我也被拒绝访问。当我 console.log req.headers['authorization'] 时,它是未定义的,所以我猜我来自 Smoothie.ejs 的 GET 请求不起作用。有谁知道解决方案是什么?