![](/img/trans.png)
[英]Express + Passport + CORS: session allowed for multiple domains
[英]Passport / Express Session Auth Breaking When Moving Server to a CORS Location
我正在使用angular.js和ionic構建一個應用程序。 我將所有前端應用程序的內容移至一個程序包中,並將服務器邏輯移至數字海洋中自己的位置。 現在,前端必須制作CORS。 在最初的身份驗證中,除了express響應上的cookie對象為空之外,其他所有內容似乎都正常運行。
工作正常時,沒有CORS。 我懂了
cookies: { 'connect.sid': 's:ZrKJ7BxH2yeAiFG5uTC2FlhpfCa9S17K.oA5bCUQjZbdJBS8ohzngSiOEFzJWCyKxLDlBdEUqhzk' },
現在,當服務器處於啟動狀態並且啟用了CORS時,我可以從響應中得到
cookies: {},
唯一可以不同的是請求來自CORS。 “ env”沒有設置任何一個,因此它們都默認為開發狀態。
我擁有的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之前就這樣做了。一定是現在響應已被發送回另一個域了嗎? 我想不出會導致護照/快遞無法像“單域”設置之前那樣工作的任何其他方法。
編輯 :我也會張貼快速會話代碼,即使這在移動服務器之前也有效。
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的請求,您不能為源設置通配符。
重要說明:響應憑據請求時,服務器必須指定域,並且不能使用通配符。 如果標頭通配符為:Access-Control-Allow-Origin:*,則上面的示例將失敗。
同樣作為鏈接說明,您需要為您的AJAX請求設置withCredentials: true
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.