0

我正在使用带有 hapi-auth-basic 的 hapijs 并尝试使用节点检查器进行调试。

在 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。我知道它应用了“简单”策略,因为如果我将 /login 的 auth 设置为 false,我会在 login.js 文件中遇到断点。

问题是我在调用中得到 401,并且我从未在 validate 函数中遇到断点。

编辑:标头由客户端发送为:

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,我是否需要发送 Authorization 标头?我认为这个页面会发送要处理的有效负载,然后如果成功,所有其他请求都会传递一些令牌,例如 jwt,包括授权标头。

我正在测试 aurelia-auth。进行调用的方法似乎没有设置任何标题。我需要配置任何设置吗?

4

1 回答 1

0

我发现了我的问题。

  1. 我试图使用 hapi-auth-basic 验证“登录”POST。这意味着它需要先前设置的身份验证密钥。但它不应该那样工作。您在有效负载中发送用户名和密码,依靠 https 来覆盖您的踪迹。然后服务器说 OK 并用您的加密标识发回 auth 标头。然后,您使用此标头对“受限”区域进行任何调用。

  2. 我无缘无故地将“jwt”方式与“基本”方式结合起来。

第 3 课。阅读 github 源代码!

于 2015-11-22T22:19:24.680 回答