HapiJS 中基于角色的身份验证
Role based authentication in HapiJS
我正在休息 API 第一个用 HapiJS 编写的项目。
在登录过程之后,用户将获得一个令牌以在每个请求的 header 中传递。
用户具有不同的角色(管理员、标准、来宾、合作伙伴),一些 Api 端点只能由具有特定角色的用户访问。
有人可以帮助我以一种很好的方式定义这个检查,所以不用每次都在路由中写检查吗?
作用域
您可以在 hapi 中使用 scopes
。当您通过检查 header 来验证请求时,您可以设置用户凭据的 scope
属性:
var validateFunc = function (username, password, callback) {
... // Your logic here
return callback(null, true, {scope: 'admin'});
};
定义路由时,您可以在 config.auth.scope
属性:
中设置允许到达该端点的 scopes
server.route({
...
config: {
auth: {
strategy: 'simple',
scope: ['user', 'admin']
},
}
...
});
现在,只有在 user
或 admin
范围内进行身份验证的用户才能访问该路由。
进程
- 确定一些范围(管理员、超级用户、来宾等)
- 配置您的身份验证例程以正确设置用户凭据的
scope
- 通过将
config.auth.scope
设置为允许访问它的任何人来配置您的路由
可运行示例
var Hapi = require('hapi');
var server = new Hapi.Server();
server.connection({ port: 4000 });
server.register(require('hapi-auth-basic'), function (err) {
if(err) {
throw err;
}
server.auth.strategy('simple', 'basic', {
validateFunc: function (username, password, callback) {
if (username === 'admin') {
return callback(null, true, {scope: 'admin'}); // They're an `admin`
}
if (username === 'user') {
return callback(null, true, {scope: 'user'}); // They're a `user`
}
return callback(null, false);
}
});
server.route([{
config: {
auth: {
strategy: 'simple',
scope: ['admin'] // Only admin
},
},
method: 'GET',
path: '/admin',
handler: function(request, reply) {
reply('Admin page');
}
}, {
config: {
auth: {
strategy: 'simple',
scope: ['user', 'admin'] // user or admin
},
},
method: 'GET',
path: '/user',
handler: function(request, reply) {
reply('User page');
}
}
]);
server.start(function () {
console.log('Started server');
});
});
我正在休息 API 第一个用 HapiJS 编写的项目。 在登录过程之后,用户将获得一个令牌以在每个请求的 header 中传递。 用户具有不同的角色(管理员、标准、来宾、合作伙伴),一些 Api 端点只能由具有特定角色的用户访问。 有人可以帮助我以一种很好的方式定义这个检查,所以不用每次都在路由中写检查吗?
作用域
您可以在 hapi 中使用 scopes
。当您通过检查 header 来验证请求时,您可以设置用户凭据的 scope
属性:
var validateFunc = function (username, password, callback) {
... // Your logic here
return callback(null, true, {scope: 'admin'});
};
定义路由时,您可以在 config.auth.scope
属性:
scopes
server.route({
...
config: {
auth: {
strategy: 'simple',
scope: ['user', 'admin']
},
}
...
});
现在,只有在 user
或 admin
范围内进行身份验证的用户才能访问该路由。
进程
- 确定一些范围(管理员、超级用户、来宾等)
- 配置您的身份验证例程以正确设置用户凭据的
scope
- 通过将
config.auth.scope
设置为允许访问它的任何人来配置您的路由
可运行示例
var Hapi = require('hapi');
var server = new Hapi.Server();
server.connection({ port: 4000 });
server.register(require('hapi-auth-basic'), function (err) {
if(err) {
throw err;
}
server.auth.strategy('simple', 'basic', {
validateFunc: function (username, password, callback) {
if (username === 'admin') {
return callback(null, true, {scope: 'admin'}); // They're an `admin`
}
if (username === 'user') {
return callback(null, true, {scope: 'user'}); // They're a `user`
}
return callback(null, false);
}
});
server.route([{
config: {
auth: {
strategy: 'simple',
scope: ['admin'] // Only admin
},
},
method: 'GET',
path: '/admin',
handler: function(request, reply) {
reply('Admin page');
}
}, {
config: {
auth: {
strategy: 'simple',
scope: ['user', 'admin'] // user or admin
},
},
method: 'GET',
path: '/user',
handler: function(request, reply) {
reply('User page');
}
}
]);
server.start(function () {
console.log('Started server');
});
});