首页 > 解决方案 > 检查当前用户是否登录

问题描述

我的 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 然后更改密码怎么办?有什么办法我不传递参数并获取登录的当前用户

标签: node.jsangular

解决方案


基本上是这样的,当您从后端登录用户时,您会向前端发送带有令牌的响应。您将此令牌保存到本地存储中,以便在对后端的每个请求中都有它。他们,您使用中间件功能来检查令牌是否像承载一样在请求的标头中提供。所以答案是:您不必检查每个请求的身份验证,您只需检查令牌是否由中间件提供以及是否正确。如果您使用的是 express,大多数应用程序在 auth 服务类中使用中间件,如下所示

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


推荐阅读