JWT 和 express-JWT 有问题
Having issues with JWT and express-JWT
我正在测试 express-jwt 和 jsonwebtokens。我以前从未使用过这个,希望得到一些帮助!
我已经完成了基本设置,但我只有一条受保护的路线。
app.use('/api', expressJWT({secret: 'cat'}));
不幸的是,我无法访问“/api”,因为它给了我这个错误
UnauthorizedError: No authorization token was found
如果我使用 POSTman 并使用以下内容发出 GET 请求 header
Authorization -> Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImJhc2hpciIsImlhdCI6MTQ1MTQ0MjM4NywiZXhwIjoxNDUxNDQyNjg3fQ.CnaLvS_oCEy_mp_9MSAmTTylJqQMI2Qlq9V3emAmN3E
一切正常,我可以访问“/api”中的内容。
但我的问题出在我的快速应用程序中,特别是当我尝试将用户重定向到新的受保护路由时。
用户登录,我创建一个新的 jwt 令牌并将用户重定向到“/api”
router.post('/login', passport.authenticate('local'), function (req, res) {
myToken = jwt.sign({
username: req.body.username
}, 'cat', {expiresIn: 60*5});
res.redirect('/api');
});
在这条路线中,我设置了 header 并呈现页面。
router.get('/api', function (req, res) {
res.render('index', {user: req.user});
});
不幸的是,我收到以下错误
UnauthorizedError: No authorization token was found
我的目标是能够将用户重定向到受保护的路由。
据我了解,由于 /api 是受保护的路由,express-jwt 应该设置我的授权 headers。即使我尝试使用中间件手动设置 headers,我仍然会收到错误消息。
非常感谢任何帮助!
谢谢!
试试 res.redirect('/api?token ' + myToken);
然后使用自定义函数更改 expressJWT 正常函数以接收查询输入。
app.use('/api', expressJWT({
secret: 'cat',
credentialsRequired: false,
getToken: function fromHeaderOrQuerystring (req) {
if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') {
return req.headers.authorization.split(' ')[1];
} else if (req.query && req.query.token) {
return req.query.token;
}
return null;
}
}));
这主要来自阅读 expressJWT 文档和其他堆栈答案。
我正在测试 express-jwt 和 jsonwebtokens。我以前从未使用过这个,希望得到一些帮助!
我已经完成了基本设置,但我只有一条受保护的路线。
app.use('/api', expressJWT({secret: 'cat'}));
不幸的是,我无法访问“/api”,因为它给了我这个错误
UnauthorizedError: No authorization token was found
如果我使用 POSTman 并使用以下内容发出 GET 请求 header
Authorization -> Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImJhc2hpciIsImlhdCI6MTQ1MTQ0MjM4NywiZXhwIjoxNDUxNDQyNjg3fQ.CnaLvS_oCEy_mp_9MSAmTTylJqQMI2Qlq9V3emAmN3E
一切正常,我可以访问“/api”中的内容。
但我的问题出在我的快速应用程序中,特别是当我尝试将用户重定向到新的受保护路由时。
用户登录,我创建一个新的 jwt 令牌并将用户重定向到“/api”
router.post('/login', passport.authenticate('local'), function (req, res) {
myToken = jwt.sign({
username: req.body.username
}, 'cat', {expiresIn: 60*5});
res.redirect('/api');
});
在这条路线中,我设置了 header 并呈现页面。
router.get('/api', function (req, res) {
res.render('index', {user: req.user});
});
不幸的是,我收到以下错误
UnauthorizedError: No authorization token was found
我的目标是能够将用户重定向到受保护的路由。
据我了解,由于 /api 是受保护的路由,express-jwt 应该设置我的授权 headers。即使我尝试使用中间件手动设置 headers,我仍然会收到错误消息。
非常感谢任何帮助!
谢谢!
试试 res.redirect('/api?token ' + myToken);
然后使用自定义函数更改 expressJWT 正常函数以接收查询输入。
app.use('/api', expressJWT({
secret: 'cat',
credentialsRequired: false,
getToken: function fromHeaderOrQuerystring (req) {
if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') {
return req.headers.authorization.split(' ')[1];
} else if (req.query && req.query.token) {
return req.query.token;
}
return null;
}
}));
这主要来自阅读 expressJWT 文档和其他堆栈答案。