[英]Express-session req.session in Websocket Socket.io?
我嘗試在 express 和 socket.io 之間交換會話 -
當我連接到 Websocket 時,我可以在 session 中設置 userData 並在另一個 Websocket 事件中再次獲取它!
服務器.ts
const session = require("express-session");
const sessionData = {
name: COOKIE_NAME,
secret:COOKIE_SECRET,
resave: false,
saveUninitialized: false,
store: store
}
const expressSession = expressSession(sessionData);
const socketSession = require("express-socket.io-session");
const sharedsession = socketSession(expressSession, {
autoSave:true
})
const io = new Server(httpsServer,{
cors: {
origin: "https://localhost:3000",
methods: ["GET", "POST"]
}
})
io.use(sharedsession);
io.on("connection", (socket: Socket) => {
socket.on("message",userdata=>{
var data = socket.handshake || socket.request;
(data as any).session.userdata = userdata;
(data as any).session.save();
console.log("From Session:",(data as any).session.userdata)
})
socket.on("getUser",()=>{
var data = socket.handshake || socket.request;
console.log("Got it: ",(data as any).session.userdata)// good!
})
});
但是現在......當我在這樣的快速路線中設置 session 時:
app.get('/login', function (req, res) {
req.session.user = {_id: '', firstname:'Hide', lastname:'myPain',email:'Harold@hiden.com', hasPain: false, };
res.send('You are now logged in! => isLoggedIn:' + JSON.stringify(req.session.user));
});
現在我想在我的 Websocket 事件中訪問這個 req.session.user:
socket.on("getUser",()=>{
var data = socket.handshake || socket.request;
console.log("Got it: ",(data as any).session.user) // undefined!
})
我在 req.session.user 的快速路由中設置的 session.user 未定義.. 為什么? 它是要像這樣工作,還是只是為了在 Websocket 事件之間交換?
或者我只需要觸發
(data as any).session.user= newUserDataFromExpressReq;
(data as any).session.save();
當用戶調用我的快速端點進行登錄時在我的 socketio 上? 所以它不是真正的自動交換?
好的,所需要的只是向客戶端添加“withCredentials”選項。 當您的客戶端和服務器在不同的服務器/端口上運行時,這是必需的。
// client-side
const io = require("socket.io-client");
const socket = io("https://api.example.com", {
withCredentials: true,
extraHeaders: {
"my-custom-header": "abcd"
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.