使用 hapi-auth-cookie 的身份验证未设置会话

Authentication with hapi-auth-cookie not setting session

我正在尝试使用 Hapijs 及其插件 hapi-auth-cookie 设置简单的身份验证,但即使登录似乎成功(现在是模拟登录),当我尝试访问其他API 的端点,我仍然遇到未经授权的异常。

这是我的服务器:

server.register([inert, auth], function(err){
  server.auth.strategy('base', 'cookie', {
    password: 'supersecretpassword', // cookie secret
    cookie: 'app-cookie', // Cookie name
    ttl: 24 * 60 * 60 * 1000 // Set session to 1 day
  });

  server.auth.default({
    strategy: 'base'
  });

    server.route(routes.endpoints);
    //Start the server
    server.start(function () {
        console.log('Server running at:', server.info.uri);
    });
}); 

这是我的登录和注销功能:

exports.login = {
    auth: false,
    validate: {
      payload: {
        email: joi.string().email().required(),
        password: joi.string().min(2).max(200).required()
      }
    },
    handler: function(request, reply) {
        if(request.payload.email === 'guest@guest.com' && request.payload.password === 'password') {
          request.auth.session.set({id: 123, email: 'guest@guest.com'});
          return reply('Login Successful');
        } else {
          return reply(boom.unauthorized('Bad email or password'));
        }
  }
};

exports.logout = {
    auth: false,
    handler: function(request, reply) {
      request.auth.session.clear();
      return reply('Logout Successful!');
    }
  };

当我点击登录端点时,它会回复 "Login Successful" 消息,但正如我所说,无法访问其配置中没有 "auth: false" 的其他端点。

任何帮助将不胜感激。

首先检查浏览器是否创建了cookie。在此之后尝试像这样设置 auth 对象:

auth: {mode:'required',strategy:'base'}

其他模式有:试用,可选。如果用户是否通过身份验证无关紧要,请设置为可选。将 required 设置为您只希望经过身份验证的用户访问的端点。

如果您想通过用户角色保护路由,您需要为会话中设置的用户对象设置范围属性:

request.auth.session.set({id: 123, email: 'guest@guest.com', scope:'admin'});

稍后在您设置范围的路由的 auth 对象上:

auth: {scope: ['admin']}

还可以在创建策略时设置 isSecure: false。这样cookie就发送给了客户端。