2015-08-20 57 views
0

我相信花了很多时间解码这个Pendora盒子strongloop NodeJS的REST框架。本教程已成功设置了two factor authentication模块。这是工作正常,与mongo设置为用户的数据源。获取用户访问令牌和验证请求

我有2个问题请教:

1)一旦User.Create()被执行,下面的模型结构存储在数据库中,并发送作为客户端的响应。

{ 
    "id": "RMQ1dC03Ws8swaxPNvqKLPXEbOw6PcKYPisjsQgOuPmqmqJ0hEJKNzsjROppQAHy", 
    "ttl": 86400, 
    "created": "2015-08-17T18:18:56.158Z", 
    "userId": "55d2259032786ce55eeed0fca", 
    "user": { 
    "email": "[email protected]", 
    "id": "55d2259032786ce55eeed0fca" 
    } 
} 

id字段是accessTokenuserId是针对用户标识符。 ttl指定令牌的过期时间,默认情况下为2周,但如果我在任何时候访问User.login(),则会生成不同的accessToken。

我该如何验证针对URL中提供的任何accessToken的任何用户请求?

2)我想创建一个superUseradmin用户来访问所有针对任何用户的访问权限,该权限默认被拒绝。要做到这一点,我已经在启动脚本创建了role admin用户:

module.exports = function(app) { 
    var role = app.models.Role; 
    var roleMapping = app.models.RoleMapping; 
    app.models.User.login({email: '[email protected]', password: '124154'}, function(err, accessToken) { 
        if (err) return console.error(err); 
        console.log(accessToken); 
        role.create({ 
         name:'admin' 
        }, function(err, rtnRole){ 
         if (err) { 
          console.log('role error'); 
          return console.error(err); 
         } 
         rtnRole.principals.create({ 
          principalType: roleMapping.USER, 
          principalId: accessToken.userId 
         }, function(err, principal){ 
          if (err) return console.error(err); 
          console.dir(principal); 
         }); 
        }); 
       }); 

}; 

输出:

{ principalType: 'USER', 
    principalId: '55d168c82de07a275c07921f', 
    roleId: 1, 
    id: 1 } 

...不过该用户未经授权,accesstokens我应该。如何获得管理控制?并用令牌验证任何用户请求?

UPDATE

说完之后@Thibault提供的步骤,我能够产生acl的管理。这是我的model.json貌似现在:

{ 
    "name": "BudUser", 
    "base": "User", 
    "idInjection": true, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
    "email": { 
     "type": "string", 
     "required": true, 
     "index": { 
     "unique": true 
     } 
    }, 
    "number": { 
     "type": "string" 
    } 
    }, 
    "validations": [], 
    "relations": {}, 
    "acls": [ 
    { 
     "accessType": "*", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "ALLOW", 
     "property": "requestCode" 
    }, 
    { 
     "accessType": "*", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "ALLOW", 
     "property": "loginWithCode" 
    }, 
    { 
     "accessType": "*", 
     "principalType": "ROLE", 
     "principalId": "admin", 
     "permission": "ALLOW" 
    } 
    ], 
    "methods": {} 
} 

如何查询https://nodews-somedomain.c9.io:443/api/BudUsers/id/accessTokens来获取用户的所有accessToken?而如何进行身份验证,看起来像一个用户请求:

https://nodews-faizanjehangir.c9.io:443/api/BudUsers/getList?accessToken=214392174214jh21hgj12g4

而且,我应该担心的令牌生成和过期?我应该将其存储在数据库中吗?

User not authorized

+0

你可以在/common/models/model.json中显示管理员角色的ACL吗? – JSimonsen

回答

1

您有ACL玩,不要忘记使用发电机:

slc loopback:acl

  • 选择模型应用ACL条目:所有现有的模型
  • 选择ACL范围:所有方法和属性
  • 选择访问类型:全部(匹配所有类型)
  • 选择角色:(自定义)>管理
  • 选择权限适用于:明确授予访问

如果我没记错的accessToken是一个内置的模型,你有要“覆盖”默认的ACL您的具体角色,并确保此角色具有优先权。

不要忘了使用debug:loopback *你会看到发生了什么事情(特别是角色的分数)。

+0

我已经按照步骤生成了acl ..请参考问题中提供的更新.. – faizanjehangir

相关问题