【问题标题】:Loopback 2.8: Check user status before every request to apiLoopback 2.8:在每次请求 api 之前检查用户状态
【发布时间】:2017-09-18 16:58:03
【问题描述】:

我需要在每次请求 api 之前检查用户状态并返回 403,如果它是非活动用户。

我尝试在通配符beforeRemote 中执行检查,但我必须为我想要限制访问的每个模型注册它。

也可以注册 express 中间件,但 req.accessToken 到那时还不存在。

有没有更好的方法来限制用户访问?

【问题讨论】:

    标签: loopbackjs strongloop


    【解决方案1】:

    作为一个选项,您可以尝试引入一个新角色 ACTIVE_USER 并使用 ACL 来控制访问。一些文档链接:rolesaccess control concepts

    【讨论】:

    • 很好的解决方案,但对我不起作用。注册inactive 角色(通配符DENY)后,我通过运行$ DEBUG=loopback:security:acl slc run 检查调试输出。 inactive 角色(得分 7511)与 $owner 角色(得分 8016)重叠。这就是计算 acl 优先级的方式。
    【解决方案2】:

    为此使用一个简单的快速中间件怎么样?

    app.use(function checkIfUserIsActive(req, res, next) {
    if (!req.accessToken) {
        // User not logged in
        return next();
    }
    app.models.UserModel.findById(req.accessToken.userId, function (err, user) {
        if (err) {
            // Error with finding the user
            return next(err);
        }
        if (!user) {
            return next(new Error('No user with this access token was found.'));
        }
        if (!user.active) {
            return next(new Error('User is inactive.'));
        } else {
            return next();
        }
    });
    });
    

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 感谢您的回复,但它对我不起作用,因为另一个角色解析器(如 $owner)的计算优先级高于新角色解析器。
      • 在 roleResolver 中拒绝也会导致 401。
      猜你喜欢
      • 2020-10-20
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多