我已經嘗試了很多針對類似問題的答案,但我的問題與直截了當的問題略有不同CORS。
我正在使用passport-saml我的 Node JS 應用程式來使用 ADFS 對我的 Web 應用程式進行身份驗證。只要我只部署應用程式的一個實體,一切都可以正常作業,但是一旦我使用運行多個實體,pm2就會收到以下錯誤:
Access to XMLHttpRequest at 'https://login.microsoftonline.com/.....'
(redirected from 'https://sampleserver.com/get/employee')
from origin 'https://sampleserver.com' has been blocked by
CORS policy: Response to preflight request doesn't pass access control check:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
這是我的 pm2 組態檔:
{
"apps": [
{
"name" : "sample-worker",
"script" : "./app",
"log_date_format": "YYYY-MM-DD HH:mm:ss.SSS",
"autorestart" : true,
"instances" : 3,
"exec_mode" : "cluster",
"instance_var": "INSTANCE_ID"
}
]
}
根據網上發布的一些問題,我嘗試了以下方法:
app.use(express.json());
app.use(cors({ origin: true }));
還
const corsOptions = {
origin: '*',
optionsSuccessStatus: 200
};
app.options('*', cors(corsOptions));
并且還嘗試了以下問題中的其他一些選項:
問題_1
問題2
問題_3
如果您需要任何其他資訊來進一步了解該問題,請告訴我。我非常感謝我能得到的任何幫助。我已經堅持了好幾天了。
PS 當僅部署單個實體時,該應用程式運行良好 - 無論是使用node命令還是pm2命令部署。
編輯:這是檢查請求物件中是否存在用戶的代碼:
app.get("/", function (req, res, next) {
if (req.isAuthenticated()) {
console.log(JSON.stringify(req.user));
next();
} else {
console.log("***************************");
console.log('User not authenticated, routing to AD for authentication');
console.log('***************************');
res.redirect("/login");
}
});
uj5u.com熱心網友回復:
這不是 CORS 問題,而是會話管理問題:
在成功的 SAML 登錄流程之后,服務器會發出一個會話 cookie,瀏覽器會在每個后續請求中重新發送該 cookie。
為使其與多個后端實體一起作業,必須確保由一個實體發出的會話 cookie 也被所有其他實體識別。換句話說:實體需要一個公共會話存盤,例如資料庫。將會話存盤在全域 Node.js 變數中不起作用,因為每個實體都有自己的全域變數。
pm2檔案也說了這么多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/516547.html
上一篇:如何使用Node.JS訪問網站上HTML檔案中使用的檔案
下一篇:如何向用戶呼叫資料參考?
