【问题标题】:Getting 401 error in loopback with User Model使用用户模型在环回中出现 401 错误
【发布时间】:2017-02-24 15:30:27
【问题描述】:

我的另一个数据库中有超过 5k 个用户的列表,我想迁移环回数据库中的所有用户,存在许多重复用户,因此我正在检查用户是否存在,然后我正在更新用户,否则我我正在创建一个新的。我为此写了一个脚本。它工作正常,但在更新第一个用户后,如果我执行 GET 用户详细信息 API,环回开始抛出错误 401 Unauthorized。即使我已经允许未经身份验证的用户访问更新,使用 ACL 创建属性,但它也不能使用它。

我已经扩展了用户模型。

任何人都可以请一些光吗?需要帮助!

谢谢

【问题讨论】:

    标签: javascript node.js database-migration loopbackjs strongloop


    【解决方案1】:

    LoopBack 的默认 ACL 比您定义的更具体,因此您的默认 ACL 最终不会生效。 @authenticated 和 @unauthenticated ALLOW 规则不优先于 DENY 所有规则。但是自定义角色可以,并且使用自定义ADMINISTRATOR 角色是框架中的正确方式。

    1. 您需要为特定用户创建角色。
    2. 使用 RoleMapping 模型将该角色映射到用户。

    步骤 1 和 2 可以使用此引导脚本完成(例如:App/server/boot/create-admin-user.js):

    module.exports = function(app) {
    
      var User = app.models.ExtendedUser;
      var Role = app.models.Role;
      var RoleMapping = app.models.RoleMapping;
    
      User.findOrCreate({ where: { username: 'admin', email: 'admin@admin.com' } },
      {
        username: 'admin', 
        email: 'admin@admin.com', 
        password: 'admin123'
      }, 
      function(err, user) {
          if (err) return console.log(err);
          // Create the admin role
          Role.findOrCreate({where: { name: 'ADMINISTRATOR' }},
            { name: 'ADMINISTRATOR' }, 
            function(err, role) {
              if (err) return debug(err);
              console.log("Role Created: " + role.name);     
              // Assign admin role
              RoleMapping.findOrCreate({where: { roleId: role.id, principalId: user.id }},
                { roleId: role.id, principalId: user.id, principalType: RoleMapping.USER }, 
                function(err, roleMapping) {
                  if (err) return console.log(err);
                  console.log("ADMINISTRATOR Role assigned to " + user.username);
                });        
            });
        });
    };
    
    1. 在您的 ExtendedUser 模型中创建一个 ACL 条目以允许角色 ADMINISTRATOR 写入:

    ```

    {
      "name": "ExtendedUser",
      "base": "User",
      /* ... */
      "acls": [
        {
          "accessType": "READ",
          "principalType": "ROLE",
          "principalId": "$authenticated",
          "permission": "ALLOW"
        },
        {
          "accessType": "WRITE",
          "principalType": "ROLE",
          "principalId": "ADMINISTRATOR",
          "permission": "ALLOW"
        }
      ]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多