Я настраиваю веб-сервис, который обеспечивает как аутентификацию, так и интерфейс WebSocket.API сервера должен быть доступен для междоменных доменов и при этом получать cookie-файлы, установленные для домена сервера.В fetch
это возможно с опцией credentials: "include"
, и она работает хорошо.Есть ли эквивалент для WebSocket?
По сути, у меня сервер Node.js, работающий на a.com
:
let app = require("express")()
// ...
//headers
app.use((req, res, next) => {
console.log(req.headers)
console.log(req.protocol)
// Allow multiple origins from config
let origin = req.headers.origin
if (config.allowedOrigins.includes(origin)) {
res.setHeader("Access-Control-Allow-Origin", origin)
}
res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization")
res.setHeader("Access-Control-Allow-Methods", "GET,PUT,POST,PATCH,DELETE")
res.setHeader("Access-Control-Allow-Credentials", true)
res.setHeader("Access-Control-Expose-Headers", "X-Total-Count, Link")
next()
})
// ...
app.ws("/", (ws, req) => {
const sessionID = req.sessionID // should be the same sessionID for requests from all origins
// ...
})
// ...
из веб-приложения, размещенного на b.com:
let socket = new WebSocket("wss://a.com") // should include cookie from a.com
Это хорошо работает, когда я тестирую его локально и все работает на localhost
, но не работает, когда веб-приложение работает на другом домене.
Я хотел бы иметь возможность, чтобыпользователь входит в систему на a.com
, но может использовать тот же сеанс для запроса WebSocket с b.com
.
Я благодарен за каждое предложение!