hapi-auth-cookie没有设置cookie

时间:2014-08-18 02:12:53

标签: node.js authentication cookies

对于我的节点应用我使用bell和hapi-auth-cookie插件来使用Yahoo api。使用当前代码,我可以通过Yahoo进行身份验证,然后重定向到主页。但是,一旦我到达主页,request.auth似乎是空的。据我所知,我正在完成所有事情,但是一旦我回到主页,我就没有认证。任何帮助表示赞赏!这就是我所拥有的:

var Path = require('path');
var Hapi = require('hapi');
var cookieSession = require('cookie-session');

var serverOptions = {
  views: {
    engines: {
      html: require('handlebars')
    },
  path: Path.join(__dirname, './app/www/public/pages'),
  layoutPath: Path.join(__dirname, './app/www/public/pages')
  }
};

var server = new Hapi.Server(8003, serverOptions);

server.pack.register([
  require('bell'),
  require('hapi-auth-cookie')
], function(err) {
  if (err) {
    throw err;
  }

  server.auth.strategy('yahoo', 'bell', {
    provider: 'yahoo',
    password: 'cookie_encryption_password',
    clientId:'2kj3kj2',
    clientSecret: '3kj2k3jl',
    isSecure: false     // Terrible idea but required if not using HTTPS
  });

  server.auth.strategy('session', 'cookie', {
    password: 'secret',
    cookie: 'sid-example',
    redirectTo: '/login',
    isSecure: false
  });

  server.route({
    method: ['GET', 'POST'], // Must handle both GET and POST
    path: '/login',          // The callback endpoint registered with the provider
    config: {
      auth: 'yahoo',
      handler: function (request, reply) {

        var creds = request.auth.credentials;
        request.auth.session.clear();
        request.auth.session.set(creds);
        return reply.redirect('/');
      }
    }
  });

  server.route({
    method: 'GET',
    path: '/',
    handler: function (request, reply) {
      reply.view('index', { title: 'hello world' });
    }
  });

  server.start();
});

3 个答案:

答案 0 :(得分:3)

阐述并扩展伊兰的答案:

如果您想要访问不需要身份验证的路由的身份验证/会话数据(例如主页),我认为这是可能的,但不是很直观。您必须在路线上设置身份验证方案,然后将模式更改为'尝试'并设置路由特定的hapi-auth-cookie参数,以防止未经身份验证的用户被重定向到登录页面:

server.route({
  method: 'GET',
  path: '/',
  config: {
    handler: homepage,
    auth: {
      mode: 'try',
      strategy: 'session'
    },
    plugins: { 'hapi-auth-cookie': { redirectTo: false } }
  }
});

mode: 'try'将允许用户进行路由路径,即使未经过身份验证,redirectTo: false将停止未经身份验证的请求,以便将路由重定向到登录页面。这样,用户无需身份验证即可访问此路由(通常用于主页),但经过身份验证后,可通过hapi-auth-cookie对cookie数据集进行身份验证。

答案 1 :(得分:1)

您的主页缺少身份验证。您需要配置' /'使用你的cookie身份验证方案。

答案 2 :(得分:0)

即使设置正确,我最近也看到了Facebook和Twitter的问题(所以我可以看到雅虎做同样的事情),具体取决于使用的是哪个版本的Bell(4.0肯定有Facebook问题)以及是否有电话是否来自node_modules。听起来很疯狂,这些问题可以在Clapper的最新版本中看到,其中hapi-bell-auth-cookie-plugin使用完全相同的方法(但不是node_module)可以正常工作。