Game-as-a-Service / Lobby-Platform-Service

The Lobby platform backend of Game as a Service.
https://api.gaas.waterballsa.tw/swagger-ui/index.html
Apache License 2.0
30 stars 7 forks source link

後端處理/解析收到的 token #196

Closed ricksu978 closed 8 months ago

ricksu978 commented 9 months ago

Q: 前端 甚麼時候 需要用 websocket 送資料 給後端?? A: 聊天室

AC:

kuoche1712003 commented 9 months ago

試了一個晚上沒有找到什麼比較好的解法跟 Spring Security 整合再一起 嘗試在連線時把 Authentication 放進 Securitycontextholder 但在接收 event 從 Securitycontextholder 拿不到 Authentication

後來就決定用比較 Hacky 的方式 在 Socket.IO 連線時去解 Token 然後查 UserId 然後把連線加入房間, 房間名稱是他的 UserId 之後想要知道連線的 UserId 就把他所有有加入的房間拿出來 找到有 USER_ prefix 的就是他的 UserId

kuoche1712003 commented 9 months ago

另外我還有順便把聊天室的 Event 也接上了

kuoche1712003 commented 9 months ago

在 Socket.IO 連線時 會從 url parameter 的 token 取出 jwt token 再來會解析 jwt token 取出 subject ex. google-oauth2|102527320242660434908 從資料庫查出他對應的 userId ex. 173921799328193 然後把這個 SocketIOClient join room ex. USER_173921799328193

之後接收到 event 我們可以從 client 獲得其所在的房間 ex. ROOM_1972919392, USER173921799328193 從中找到 USER 開頭的房間 然後就知道這個連線的 userId 為 173921799328193