对于我的节点应用我使用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();
});
答案 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)可以正常工作。