我相信花了很多时间解码这个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
字段是accessToken
和userId
是针对用户标识符。 ttl
指定令牌的过期时间,默认情况下为2周,但如果我在任何时候访问User.login()
,则会生成不同的accessToken。
我该如何验证针对URL中提供的任何accessToken的任何用户请求?
2)我想创建一个superUser
或admin
用户来访问所有针对任何用户的访问权限,该权限默认被拒绝。要做到这一点,我已经在启动脚本创建了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
而且,我应该担心的令牌生成和过期?我应该将其存储在数据库中吗?
你可以在/common/models/model.json中显示管理员角色的ACL吗? – JSimonsen