hapi中的认证(verification)是基于scheme和strategies两个概念。你可以把scheme理解为一个通用的验证,就是那种基本的、概括性的描述。另一方面,策略是预先配置的命名方案实例。为了更好地理解hapi中的身份验证,请看下面这个示例:'usestrict';constBcrypt=require('bcrypt');constHapi=require('hapi');constBasic=require('hapi-auth-basic');constserver=newHapi.Server();server.connection({port:3000});constusers={john:{用户名:'john',密码:'$2a$10$iqJSHD.BGr0E2IxQwYgJmeP3NvhPrXAeLSaGCj6IR/XU5QtjVu5Tm',//'secret'name:'JohnDoe',id:'2133d32a'}};constvalidate=function(request,username,password,callback){constuser=users[用户名];如果(!用户){返回回调(空,假);}Bcrypt.compare(password,user.password,(err,isValid)=>{callback(err,isValid,{id:user.id,name:user.name});});};server.register(基本,(err)=>{if(err){throwerr;}server.auth.strategy('simple','basic',{validateFunc:validate});server.route({method:'GET',path:'/',配置:{auth:'simple',handler:function(request,reply){reply('你好,'+request.auth.credentials.name);}}});server.start((err)=>{if(err){throwerr;}console.log('服务器运行于:'+server.info.uri);});});上面的代码做了如下操作:定义了一个用户数据信息,包括用户名、密码等信息定义实现了验证功能,这是专门为hapi-auth-basic实现的功能,让我们验证提供给的凭据我们由用户。注册了一个插件(hapi-auth-basic),它创建了一个名为basic的方案。执行上述文件并访问localhost:3000。在弹出的登录框中输入用户名和密码,页面会显示:hello,JohnDoetip:如果npminstallbcrypt报错,可以使用bcryptjs模块替换bcrypt,其余代码做不需要改变。
