检查当前用户是否已登录

时间:2019-04-29 12:09:03

标签: node.js angular

我的角度应用程序中有一个个人资料部分,现在我有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,然后更改密码该怎么办?有什么办法我不传递参数并获得当前登录的用户

1 个答案:

答案 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