第一次接触hapi这个框架是在掘金小册中看到了叶盛飞老师的基于hapi的Node.js小程序后端开发实践指南 对hapi产生了浓厚的兴趣, 先简单介绍一下
用于构建应用程序和服务的丰富框架hapi使开发人员能够专注于编写可重用的应用程序逻辑,而不是花时间构建基础设施。hapi 是一个用来构建基于 Node.js 的应用和服务的富框架,能够帮助我们把关注重点放在高可用的应用业务逻辑层而不是构建架构。hapi 的官方 GitHub Repositories 中,提供了大量的常用高质量插件(100% 测试覆盖率),基本覆盖 Web 应用开发常用的功能。
hapi 的身份认证基于两个概念:schems和strategies。
schems
:
sechme是一个拥有签名function (server, options)的方法。server参数是需要添加这个 scheme 的服务器对象的引用, options 参数是使用它注册 strategy 时的配置strategies
:
strategy 其实是一个预先配置好的 scheme 实例拷贝。
为个别接口开启身份验证
server.route({
method: 'GET',
path: '/',
options: {
auth: 'simple' // 进行simple身份验证
},
handler: function (request, h) {
return 'welcome';
}
});
全局开启接口身份验证
// 二者只能存在一个, 不能同用
server.auth.default('simple'); // strategy
server.auth.default('simple', 'xxxx'); // strategies
接口内的权重大于全局,优先显示接口的
hapi提供了一个名为scope的基本的角色授权功能。
scope: 值可以是范围字符串或范围字符串数组。
您还可以访问请求对象(查询、参数、有效负载和凭据)上的属性,以通过在属性名周围使用“{和'}”字符来填充动态范围,例如“user-{params.id}”。
{
method: 'GET',
path: '/',
options: {
auth: {
strategy: 'simple',
scope: ['user']
}
},
handler: function (request, h) {
return 'welcome';
}
},
mode参数可以被设置为required,optional 或者try 。 这三种参数在注册 strategy 的时候方式相同。
required:在访问路由的时候必须对用户进行身份进行验证,并且验证必须有效,否则他们将收到错误。
optional:身份验证是可选的-请求必须包括有效凭证或根本没有凭证。
try :与optional类似,尝试验证任何请求凭据,但是如果凭据无效,则无论身份验证错误如何,请求都会继续执行handler。
{
method: 'GET',
path: '/',
options: {
auth: {
strategy: 'simple',
mode: 'try'
}
},
handler: function (request, h) {
return 'welcome';
}
},
如果设置了,则在处理传入请求有效负载之后对其进行身份验证。需要支持有效负载身份验证的策略(例如,Hawk,后续会)。当方案将身份验证选项.payload设置为true时,无法将其设置为“.”以外的值。
false :无有效负载身份验证。
required :需要有效负载身份验证。
optional :只有当客户端包括有效负载身份验证信息(例如,Hawk中的hash属性)时才执行有效负载身份验证
在hapi的教程中 第一个就是身份验证 可见它的重要性收集了几种身份验证的插件, 在接下来文章中依次介绍
hapi-auth-basic
hapi-auth-cookie
hapi-auth-bearer-token
在产品中使用运行别人的代码时,你应该始终保持警惕---尽管这些代码目的在于保护你的应用。如果可以的话,在使用身份验证插件前先自行研究一下插件的源码,或者使用流行的、有优秀文档的、经过充分测试的插件,比如在Github上由hapi组织发布的插件。
---hapi.js实战
完事~