簡體   English   中英

將服務器移至CORS位置時Passport / Express會話身份驗證中斷

[英]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的請求,您不能為源設置通配符。

帶有憑證的CORS

重要說明:響應憑據請求時,服務器必須指定域,並且不能使用通配符。 如果標頭通配符為:Access-Control-Allow-Origin:*,則上面的示例將失敗。

同樣作為鏈接說明,您需要為您的AJAX請求設置withCredentials: true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM