abc.js文件中有些接口需要鉴权,有些接口不需要鉴权。
下面是一个不需要认证的abc.js接口。此API放在JWT身份验证码之上。
router.get('/callback',function(req,res)
{
if(req.method === "GET"){
console.log(req.query.abc);
console.log(req.query.abc);
return;
}
}); 然而,当我尝试调用上面的API时。它返回no access token。下面是我如何编写我的JWT身份验证:
router.use(function(req, res, next) {
// check header or url parameters or post parameters for token
var token = req.query["access_token"] ;
// decode token
if (token) {
// verifies secret and checks exp
jwt.verify(token, process.env.SECRETKEY, function(err, decoded) {
if (err) {
return res.json({ success: false, message: 'Failed to authenticate token.' });
} else {
// if everything is good, save to request for use in other routes
req.decoded = decoded;
next();
}
});
} else {
// if there is no token
// return an error
return res.status(403).send({
success: false,
error: 'No access token.'
});
}
});上面代码下面的任何API都需要在参数中插入访问令牌。如果不需要在参数中插入访问令牌,如何调用上面的callback接口?目前,当我调用它时,它总是返回no access token。
发布于 2018-06-21 18:34:14
router.use是中间件。它将在处理任何请求之前运行。所以之前的想法行不通。
最好的方法是定义一个无身份验证路由:
router.use('/callback', function(req, res, next) {
next()
}, function(req, res, next) {
// check header or url parameters or post parameters for token
var token = req.query["access_token"] ;
// decode token
if (token) {
// verifies secret and checks exp
jwt.verify(token, process.env.SECRETKEY, function(err, decoded) {
if (err) {
return res.json({ success: false, message: 'Failed to authenticate token.' });
} else {
// if everything is good, save to request for use in other routes
req.decoded = decoded;
next();
}
});
} else {
// if there is no token
// return an error
return res.status(403).send({
success: false,
error: 'No access token.'
});
}});
See express JS docs
发布于 2018-06-21 18:46:02
使用下面的方式
exports.isAuthenticate = async (req, res, next) => {
// check header or url parameters or post parameters for token
var token = req.body.token || req.query.token || req.headers['x-access-token'];
if (!token) {
return sendUnauthorizedRes(res, 'Access Token not specified.');
}
jwt.verify(token, constants.JWTContant.SECRET_KEY, async (err, response) => {
if (err) {
return sendUnauthorizedRes(res, 'Invalid access token.');
} else {
// if everything is good, save to request for use in other routes
req.userInfo = response;
if (await authModel.verify(token, req.userInfo.user._id)) {
next();
} else {
return sendUnauthorizedRes(res, 'Invalid access token.');
}
}
});
};用于带身份验证的API
router.get('/api/user', jwtHandler.isAuthenticate, userController.getUserDetails);用于无身份验证的API
router.post('/api/login/facebook', authController.facebookLogin);https://stackoverflow.com/questions/50966173
复制相似问题