资讯专栏INFORMATION COLUMN

hapi入门之Authentication篇

wupengyu / 2809人阅读

摘要:里面的验证是基于和这两个概念的。另一方面,是一个预先配置的命名的实例。注册了一个插件该插件创建了一个命名为的。执行上述文件,访问。在弹出的登录框中输入用户名及密码,页面将展示如果报错,可使用模块替代,其余代码无需改变。

hapi里面的Authentication(验证)是基于scheme和strategies这两个概念的。
你可以把scheme理解为一个通用型的验证,是那种基础的,概要的的描述。
另一方面,strategy是一个预先配置的、命名的scheme实例。

为了更好地理解hapi中的Authentication,请看下面这个示例:

</>复制代码

  1. "use strict";
  2. const Bcrypt = require("bcrypt");
  3. const Hapi = require("hapi");
  4. const Basic = require("hapi-auth-basic");
  5. const server = new Hapi.Server();
  6. server.connection({ port: 3000 });
  7. const users = {
  8. john: {
  9. username: "john",
  10. password: "$2a$10$iqJSHD.BGr0E2IxQwYgJmeP3NvhPrXAeLSaGCj6IR/XU5QtjVu5Tm", // "secret"
  11. name: "John Doe",
  12. id: "2133d32a"
  13. }
  14. };
  15. const validate = function (request, username, password, callback) {
  16. const user = users[username];
  17. if (!user) {
  18. return callback(null, false);
  19. }
  20. Bcrypt.compare(password, user.password, (err, isValid) => {
  21. callback(err, isValid, { id: user.id, name: user.name });
  22. });
  23. };
  24. server.register(Basic, (err) => {
  25. if (err) {
  26. throw err;
  27. }
  28. server.auth.strategy("simple", "basic", { validateFunc: validate });
  29. server.route({
  30. method: "GET",
  31. path: "/",
  32. config: {
  33. auth: "simple",
  34. handler: function (request, reply) {
  35. reply("hello, " + request.auth.credentials.name);
  36. }
  37. }
  38. });
  39. server.start((err) => {
  40. if (err) {
  41. throw err;
  42. }
  43. console.log("server running at: " + server.info.uri);
  44. });
  45. });

上述代码做了如下几个操作:

定义了一个用户数据信息,包括用户名、密码等信息。
定义了一个验证函数,它是针对于hapi-auth-basic具体实现的一个功能,允许我们去验证用户提供给我们的凭证。
注册了一个插件(hapi-auth-basic),该插件创建了一个命名为basic的scheme。
执行上述文件,访问localhost:3000。在弹出的登录框中输入用户名及密码,页面将展示:hello, John Doe
tip:如果npm install bcrypt报错,可使用bcryptjs模块替代bcrypt,其余代码无需改变。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/82561.html

相关文章

  • hapi入门文档

    摘要:对象包含服务器范围或者插件特定状态,该状态可以通过不同方法被分享。举个例子,当调用方法,有效的属性被路由和同一级别的拓展设置。当服务对象作为一个插件注册参数提供时,提供传递给方法的注册偏好。 server.realmrealm对象包含服务器范围或者插件特定状态,该状态可以通过不同方法被分享。举个例子,当调用server.bind()方法,有效的realm setting.bind属性被...

    Tamic 评论0 收藏0
  • hapi框架搭建记录(一):初始化项目

    摘要:框架,用官网的简介来说就是是构建应用程序和服务的丰富框架,它使开发人员能够专注于编写可重用的应用程序逻辑,而不是花时间构建基础设施。用自己的话简单来说,就是个类似,之类的服务基础框架。同时全局环境直接获取。 showImg(https://segmentfault.com/img/bVbrV3m?w=572&h=350); hapi框架,用官网的简介来说就是:Hapi是构建应用程序和...

    aristark 评论0 收藏0
  • hapi框架搭建记录(二):路由改造和生成接口文档

    摘要:框架,用官网的简介来说就是是构建应用程序和服务的丰富框架,它使开发人员能够专注于编写可重用的应用程序逻辑,而不是花时间构建基础设施。用自己的话简单来说,就是个类似,之类的服务基础框架。 showImg(https://segmentfault.com/img/bVbrV3m?w=572&h=350); hapi框架,用官网的简介来说就是:Hapi是构建应用程序和服务的丰富框架,它使开...

    opengps 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<