hapi里面的Authentication(验证)是基于scheme和strategies这两个概念的。
你能够把scheme理解为一个通用型的验证,是那种基础的,概要的的描述。
另外一方面,strategy是一个预先配置的、命名的scheme实例。npm
为了更好地理解hapi中的Authentication,请看下面这个示例:api
'use strict'; const Bcrypt = require('bcrypt'); const Hapi = require('hapi'); const Basic = require('hapi-auth-basic'); const server = new Hapi.Server(); server.connection({ port: 3000 }); const users = { john: { username: 'john', password: '$2a$10$iqJSHD.BGr0E2IxQwYgJmeP3NvhPrXAeLSaGCj6IR/XU5QtjVu5Tm', // 'secret' name: 'John Doe', id: '2133d32a' } }; const validate = function (request, username, password, callback) { const user = users[username]; if (!user) { return callback(null, false); } Bcrypt.compare(password, user.password, (err, isValid) => { callback(err, isValid, { id: user.id, name: user.name }); }); }; server.register(Basic, (err) => { if (err) { throw err; } server.auth.strategy('simple', 'basic', { validateFunc: validate }); server.route({ method: 'GET', path: '/', config: { auth: 'simple', handler: function (request, reply) { reply('hello, ' + request.auth.credentials.name); } } }); server.start((err) => { if (err) { throw err; } console.log('server running at: ' + server.info.uri); }); });
上述代码作了以下几个操做:函数
定义了一个用户数据信息,包括用户名、密码等信息。
定义了一个验证函数,它是针对于hapi-auth-basic具体实现的一个功能,容许咱们去验证用户提供给咱们的凭证。
注册了一个插件(hapi-auth-basic),该插件建立了一个命名为basic的scheme。
执行上述文件,访问localhost:3000。在弹出的登陆框中输入用户名及密码,页面将展现:hello, John Doe
tip:若是npm install bcrypt报错,可以使用bcryptjs模块替代bcrypt,其他代码无需改变。ui