我的角度应用程序中有一个个人资料部分,现在我有5个用户。
我有一条路线,用户必须更改密码。我想验证用户是否已正确登录并已通过身份验证,并且他们不能更改任何其他用户的密码。
router.get('/change-password/:username', (req, res) => {
User.findOne({
username: req.params.username
}).then(user => {
if (user) {
res.status(200).json(user);
} else if (!user) {
res.status(404).json({
message: 'user not found'
});
}
});
});
如果用户A登录并且将参数更改为B,然后更改密码该怎么办?有什么办法我不传递参数并获得当前登录的用户
答案 0 :(得分:2)
基本上是这样的,当您从后端登录用户时,会将带有令牌的响应发送到前端。您可以将此令牌保存到本地存储中,以在后端的每个请求中使用它。他们使用中间件函数来检查请求的标头中是否提供了令牌(如承载)。因此答案是:您不必检查每个请求的auth,只需检查令牌是否由中间件提供,以及它是否正确。 如果您使用的是Express,则大多数应用程序都使用auth服务类like this中的中间件:
module.exports.isAuthorized = function(req, res, next) {
User.findById(req.session.userId).exec(function (error, user) {
if (error) {
return next(error);
} else {
if (user === null) {
var err = new Error('Not authorized! Go back!');
err.status = 400;
return next(err);
} else {
return next();
}
}
});
}
在node.js路由上:
var auth = require('./auth');
// GET route after registering
router.get('/clientPage', auth.isAuthorized, function (req, res, next) {console.log("1114");
res.sendFile(path.join(__dirname + '/../views/clientPage.html'));
});
如您所见,第二个参数表示在发出请求之前,它将执行中间件功能auth.isAuthorized
。