我已经使用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(或任何其他网站)登录吗?
谢谢。
答案 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
}
}));