当移动服务器到CORS位置时,护照/快速会话认证被破坏
Passport / Express Session Auth Breaking When Moving Server to a CORS Location
我正在用angular.js和ionic构建一个应用程序。我将所有前端应用程序内容移到一个包中,并将服务器逻辑移到数字海洋上自己的水滴中。现在前端必须生成CORS。在初始身份验证时,除了express响应上的cookie对象为空之外,一切似乎都很正常。
当它工作时,sans CORS。我得到了这个
cookies: { 'connect.sid': 's:ZrKJ7BxH2yeAiFG5uTC2FlhpfCa9S17K.oA5bCUQjZbdJBS8ohzngSiOEFzJWCyKxLDlBdEUqhzk' },
现在,当服务器在一个液滴上启动并启用CORS时,我从响应
中得到这个 cookies: {},
唯一不同的是请求来自CORS。'env'没有在任何一个上设置,所以它们都默认为development。
CORS设置如下:
var allowCrossDomain = function(req, res, next) {
console.log("In allow cross domain function", req.headers)
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET, POST');
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.header('Access-Control-Allow-Credentials', true);
next();
}
在chrome开发人员工具中,我从未在我的资源/cookie选项卡中看到cookie土地,但我在做CORS之前做过……现在肯定是响应被发送回了另一个域,对吧?我想不出还有什么原因会导致passport/express不能像"单域"设置之前那样工作。
编辑:我也会发布快速会话代码,即使这是在移动服务器之前工作。
app.use(session({
secret: app.getValue('env').SESSION_SECRET,
store: new MongoStore({mongooseConnection: mongoose.connection}),
cookie: { maxAge: 60000, secure: false },
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function (user, done) {
console.log('Passport serializing user =>', user)
done(null, user._id);
});
passport.deserializeUser(function (id, done) {
console.log('Received this id => ', id)
UserModel.findById(id, done);
});
不能为包含cookie的请求设置来源通配符
带有凭据的CORS
重要提示:当响应一个认证请求时,服务器必须指定一个域,不能使用通配符。如果头被通配符为:Access-Control-Allow-Origin: *,上面的例子将失败。
同样如链接所述,您需要将withCredentials: true
设置为AJAX请求。
相关文章:
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 验证会话中是否存在对象's数组
- 通过javascript从会话中提取用户名
- 将会话变量从一个页面传递到另一个页面
- 如何保持会话的活力
- Codeigniter会话概念简要说明
- Php未获取会话的最新值
- 当达到codeigniter/tank auth会话超时时,在ajax调用中处理php重定向
- 如何检测用户是否在同一会话中打开了多个窗口或选项卡
- Dropbox oauth认证的IF语句的第二部分是't已触发
- PHP会话页面刷新不起作用
- 有可能通过sessionID获得快速会话吗
- 让会话值可用于JavaScript的好方法是什么
- DreamFactory REST API POST休息/用户/会话请求总是在IE9中返回错误
- '会话'未定义-会话存储的Este JS/Express/Redis
- 如何使用 php 会话变量作为 Angular Js 数据
- jquery中设置的会话无法进入php
- 通过Javascript更改PHP会话变量
- 当移动服务器到CORS位置时,护照/快速会话认证被破坏
- NodeJS会话认证