我目前正在为一个小型市场应用程序进行MEAN全栈Web项目。该项目分为三个部分: -服务器-> node.js表达猫鼬 -前腹板->角钢4 -前置手机->离子
我必须使用经典的CRUD构建这个简单的API REST,但必须使用JWT来保护我的广告(针对市场)。 使用JWT验证,用户将只能删除或修改自己创建的广告。
当前,我拥有令牌验证的中间件,但是它不能阻止用户删除其他用户创建的广告。
我正在调用我在教程中了解的中间件,它可以更改。
经过大量研究,我只找到了有关使用JWT进行身份验证的信息,那么如果有人可以帮助我,谢谢。
//my token verification's middle-ware
function verifyToken(req, res, next) {
var token = req.headers['x-access-token'];
if (!token)
return res.status(403).send({ auth: false, message: 'No token provided.' });
jwt.verify(token, config.secret, function(err, decoded) {
if (err)
return res.status(500).send({ auth: false, message: 'Failed to authenticate token.' });
// if everything good, save to request for use in other routes
req.userId = decoded.id;
next();
});
}
//an example of middle-ware call
router.delete('/:id',VerifyToken, (req, res) => {
advertModel.findById(req.params.id, (err, advert) => {
if(!advert){
res.json({message:"No advert corresponding"})
}
advert.remove((err) => {
if(err){
console.log(err);
}
res.json({message: 'Successfully deleted'});
});
});
});
该应用程序仍在构建中,如果您有任何注释可以使我改善所看到的几段代码,请继续。
答案 0 :(得分:0)
jwt令牌随请求一起提供时,如果该令牌有效,则只需使用该用户凭据将请求传递给下一个,但是如果该令牌无效,则它将停止请求生命周期。但这与您要尝试执行的操作没有任何关系。 您可以像这样在控制器代码中编写一个简单的条件
if(req.user.id !== youradd.user_id){
return ('with valid message and http code')
答案 1 :(得分:0)
@shahinmahmud是正确的。基本上,您要做的事情分为两部分。身份验证和授权。身份验证通过JWT令牌验证完成。授权是基于用户来限制访问。对于您而言,如果仅访问一种资源,那么简单的if-else
就可以。否则,您需要研究一些用户管理库。
这个definition应该会帮助