sitcon-tw / Camp2024-Drawing-Competition-Backend

A Python Turtle Judge Challenge System
Other
1 stars 2 forks source link

[Feat]: 讓/team/token回傳JWT #8

Closed burnedinthesky closed 6 months ago

burnedinthesky commented 6 months ago

Contact Details

No response

你想要提出什麼樣的新需求/功能? What demand/feature do you want?

我原本以為React的Global State是persistent的(aka在reload的時候不會消失),但看起來不是這樣,所以我需要把隊伍名稱&id也一起存進cookie/local storage裡。目前已經有一個cookie在存team的token了,然後另外開一/兩個來存隊伍資料感覺有點沒必要,如果要一併存在team的token裡那直接用JWT好像比較方便,所以希望再麻煩後端可以再開一個JWT。

提供相關的技術或實作參考 Relevant technical or implementation references

No response

行為準則 Code of Conduct

fan9704 commented 6 months ago

疑? 之前討論不是決定用 BasicAuth 不做 JWT 嗎 確定要做嗎 @burnedinthesky

fan9704 commented 6 months ago

我自己用 Vue3 Pinia 狀態管理是可以正常使用 不會影響

burnedinthesky commented 6 months ago

疑? 之前討論不是決定用 BasicAuth 不做 JWT 嗎

對的 抱歉Orz 不過後來想想好像JWT也沒有這麼麻煩?(至少對前端來說是這樣 後端實作起來會很複雜嗎?) 應該說也不一定要JWT啦 只是我希望在存cookie的時候一個cookie可以順便存team name跟id等資料 然後JWT剛好可以做到而已

burnedinthesky commented 6 months ago

我自己用 Vue3 Pinia 狀態管理是可以正常使用 不會影響

誒誒 真的嗎?! 按browser「重新整理」按鍵的時候pinia的state還留著嗎? 因為在我(跟GPT-4)的認知中 除非你有裝特別的插件(e.g., vue-pinia-persist),Pinia預設是不會有這個表現的 我用的是React的Zustand,然後雖然理論上來說也可以透過middleware加入這個功能,但我覺得如果JWT就能做到的話好像也沒有必要特別去這樣做

fan9704 commented 6 months ago

Re:

誒誒 真的嗎?! 按browser「重新整理」按鍵的時候pinia的state還留著嗎? 因為在我(跟GPT-4)的認知中 除非你有裝特別的插件(e.g., vue-pinia-persist),Pinia預設是不會有這個表現的 我用的是React的Zustand,然後雖然理論上來說也可以透過middleware加入這個功能,但我覺得如果JWT就能做到的話好像也沒有必要特別去這樣做

應該是有一點麻煩 因為阿目前的很多跟 Team_id 有關的 API 都是在假設大家用 State 儲存 team_id 的情況往下實作,如果加入了 JWT 正常來講每條 API 就不會出現 team_id 這個 path 參數,而是透過 JWT 取得 team 的資料往下搜尋

看要不要 React 也用 Persist 之類的資料

burnedinthesky commented 6 months ago

其實也不一定會,JWT的好處是在前端也可以直接讀資料,所以我還是可以得到team_id然後在call對應的後端api時使用 後端除了/team/token以外應該是不會受到影響才對

fan9704 commented 6 months ago

確定嗎 我是實作好了team/token/ 晚上我再在推上來

burnedinthesky commented 6 months ago

前端這邊已經實驗完JWT了,蠻可行的 JWT前端期待有sub (team_id) 跟 name (team_name) 這兩個欄位 然後拿到之後會直接存進cookie裡,所以後端也可以讀

fan9704 commented 6 months ago

我目前實作的部分這些內容都應該會有 我是還沒解開看 可能要試驗才知道

fan9704 commented 6 months ago

Done Please Refer https://github.com/fan9704/Drawing-Competition-Backend/pull/16

burnedinthesky commented 6 months ago

JWT前端期待有sub (team_id) 跟 name (team_name) 這兩個欄位

可以在JWT的body內再加一個team_name這個欄位嗎? 然後照JWT的慣例team_id的key好像應該是sub?

fan9704 commented 6 months ago

我能看看裡面長怎樣嗎,我以為我有放 team_name

burnedinthesky commented 6 months ago
{
  "token_type": "access",
  "exp": 1716126947,
  "iat": 1716126647,
  "jti": "45db9b7800854552b33fb13f3a01ae6b",
  "user_id": 1
}

可以用 https://jwt.io/ 來驗證

fan9704 commented 6 months ago

20 已完成本功能

burnedinthesky commented 6 months ago

已於 #22 對功能提出修改建議 接受/拒絕之後就可以close了