express-jwt 验证用户时总是发送未经授权的 401
express-jwt always sending 401 unauthorized while verifying user
我有这个 middle-ware 函数来检查用户是否登录,因为我有网络应用程序和 android 平台,因此我使用令牌 android 对于网络,我使用的是 session,默认情况下它是 passport 的管理器。
In my function
我正在检查是否有授权 header,我知道这是我的 android 平台,因此通过验证 jwt 令牌来验证用户,但它总是向我发送 401未经授权且未设置 req.user.
这里是middle-ware函数,如果有人能指出我的错误,我的逻辑哪里出了问题。
var jwt_auth = require('express-jwt')
// route middleware to make sure a user is logged in
function isLoggedIn(req, res, next) {
if (req.get("Authorization")) {
jwt_auth({secret: 'somesecret'});
if (req.user) {
return next();
}
res.send(200, "Unauthorized access");
}
else {
// if user is authenticated in the session, carry on
if (req.isAuthenticated())
return next();
// if they aren't redirect them to the home page
res.redirect('/');
}
}
那是因为 jwt_auth 是一个异步操作,您的 res.send(200, "Unauthorized access") 永远不会等待 jwt_auth 完成。
你应该看看 express-jwt 的例子。
基本的是
var jwt = require('express-jwt');
app.get('/protected',
jwt({secret: 'shhhhhhared-secret'}),
function(req, res) {
if (!req.user.admin) return res.sendStatus(401);
res.sendStatus(200);
});
如果你想传递一个自定义函数来从请求中提取令牌,使用getToken选项,下面的例子取自express jwt的README,你可以根据需要修改函数。
app.use(jwt({
secret: 'hello world !',
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;
}
}));
我有这个 middle-ware 函数来检查用户是否登录,因为我有网络应用程序和 android 平台,因此我使用令牌 android 对于网络,我使用的是 session,默认情况下它是 passport 的管理器。
In my function
我正在检查是否有授权 header,我知道这是我的 android 平台,因此通过验证 jwt 令牌来验证用户,但它总是向我发送 401未经授权且未设置 req.user.
这里是middle-ware函数,如果有人能指出我的错误,我的逻辑哪里出了问题。
var jwt_auth = require('express-jwt')
// route middleware to make sure a user is logged in
function isLoggedIn(req, res, next) {
if (req.get("Authorization")) {
jwt_auth({secret: 'somesecret'});
if (req.user) {
return next();
}
res.send(200, "Unauthorized access");
}
else {
// if user is authenticated in the session, carry on
if (req.isAuthenticated())
return next();
// if they aren't redirect them to the home page
res.redirect('/');
}
}
那是因为 jwt_auth 是一个异步操作,您的 res.send(200, "Unauthorized access") 永远不会等待 jwt_auth 完成。
你应该看看 express-jwt 的例子。
基本的是
var jwt = require('express-jwt');
app.get('/protected',
jwt({secret: 'shhhhhhared-secret'}),
function(req, res) {
if (!req.user.admin) return res.sendStatus(401);
res.sendStatus(200);
});
如果你想传递一个自定义函数来从请求中提取令牌,使用getToken选项,下面的例子取自express jwt的README,你可以根据需要修改函数。
app.use(jwt({
secret: 'hello world !',
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;
}
}));