HapiJS中基于angular色的authentication

我正在使用HapiJS编写一个restAPI第一个项目。 在login过程之后,用户获得一个令牌传递每个请求的头部。 用户具有不同的angular色(pipe理员,标准,访客,合作伙伴),某些Api端点只能由具有特定angular色的用户访问。 有人可以帮助我以一种很好的方式定义这张支票,所以不用每次都在支票内写入支票?

Solutions Collecting From Web of "HapiJS中基于angular色的authentication"

领域

你可以在hapi中使用scopes 。 当您通过检查标头来validation请求时,可以设置用户凭证的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'] }, } ... }); 

现在,只有通过useradmin身份validation的user才能访问该路由。

处理

  1. 决定一些范围(pipe理员,超级用户,客人等)
  2. configuration您的身份validation例程以正确设置用户凭据的scope
  3. 通过将config.auth.scope设置为允许访问的路由来configuration路由

可运行示例

 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'); }); });