当 hapi-auth-basic 验证函数被调用时

When hapi-auth-basic validate function gets called

我将 hapijs 与 hapi-auth-basic 一起使用并尝试使用 node-inspector 进行调试。

github 页面上的实施示例稍作修改以要求对 /login 路径进行基本身份验证而不是所有获取:

const validate = function(username, password, callback) {
  const user = users['john']; //john exists in a user array
  if (!user) {
    return callback(null, false);
  }
  callback(null, true, {
    id: user.id,
    name: user.name
  });
};
...
server.register(require('hapi-auth-basic'), (err) => {
  server.auth.strategy('simple', 'basic', {
    validateFunc: validate
  });
});

{
  method: 'POST',
  path: '/login',
  config: {
    auth: 'simple',
    handler: require('../../public/api/handlers/login.js')
  }
}

所有其他路由设置为 auth: false。 我知道它应用 'simple' 策略,因为如果我将 /login 的身份验证设置为 false,我会在 login.js 文件中遇到断点。

问题是我在调用时收到 401,而且我从未在验证函数中遇到断点。

编辑: Header 由客户端发送为:

Accept:*/*
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:accept, content-type
Access-Control-Request-Method:POST 
Connection:keep-alive
Host:localhost:3000 
Origin:http://mac.local:3000
Referer:http://mac.local:3000/ User-Agent:Mozilla/5.0
(Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36

内容为:

{"email":"a.b@com","password":"xcvx"}

我可能误解了基本身份验证中的步骤。作为登录 POST 我需要发送授权 header 吗?我认为此页面会发送要处理的有效负载,然后如果成功,所有其他请求都会传递一些令牌,例如 jwt,包括授权 header.

我正在测试 aurelia-auth。生成 call 的方法似乎没有设置任何 header。我需要配置任何设置吗?

我发现了我的问题。

  1. 我正在尝试使用 hapi-auth-basic 验证 "login" POST。这意味着它需要先前设置的身份验证密钥。但它不应该那样工作。您在有效负载中发送用户名和密码,简单地依靠 https 来掩盖您的踪迹。然后服务器说 OK 并发回 auth header 和你的加密标识。然后你使用这个 header 对 'restricted' 区域进行任何调用。

  2. 我无缘无故地将 'jwt' 方式与 'basic' 方式结合使用。

和第 3 课。阅读 github 源代码!