使用connect-mongo进行跨域会话

时间:2014-07-23 18:40:42

标签: node.js express

我已经使用Express 4构建了Node.js应用程序,对于使用connect-mongo中间件的管理会话,一切正常。

但我需要从其他网站登录我的应用程序。

应用程序托管在aws EC2上。

我使用SalesForce并在登录后,我想打开我的应用程序,但不要输入凭据......

在node.js服务器上我添加了标题:

res.setHeader('Access-Control-Allow-Origin', req.headers.origin);
res.setHeader('Access-Control-Allow-Credentials', 'true');

在SF中,onClick按钮我执行:

jsonData = {
    "email": 'test1@example.com',
    "password": "test"
}
$.ajaxSetup({
    type: "POST",
    data: {},
    dataType: 'json',
    xhrFields: {
       withCredentials: true
    },
    crossDomain: true
});



$.post( 'http://ec2-someip.us-west-2.compute.amazonaws.com//login', jsonData)
.done(function( data ) {
    console.log( "done" );

    console.log(data);
    //redirect to data url
})
.fail(function(data) {
    console.log( "error" );
    console.log( "data" );
});

Node.js返回正确的数据网址,但不添加会话cookie,这就是我重定向后看到登录页面的原因......

当我从浏览器手动发送POST请求时(我使用Google Chrome的“Rest Console”应用程序),node.js添加了cookie。

有什么问题? 有办法从SF(或任何其他网站)登录吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

通过添加Cookie域设置修复:

app.use(session({
    secret: config.get('session:key'),
    saveUninitialized: true,
    resave: true,
    store: new MongoStore({
        db: mongoose.connection.db
    }),
    cookie: {
        path: '/',
        domain:  utils.isDevelopmentEnv() ? null : '.' + config.get('domain').replace('http://', '').replace('https://', ''),
        httpOnly: true
    }
}));