Flask 如何做登入、Session 與權限:後台不是有表單就夠了
很多人做第一個 Flask 後台時,常常會先有登入頁、帳號欄位、密碼欄位,看起來好像就已經有後台了。但真正有沒有登入系統,不只是看有沒有表單,而是你有沒有處理 session、權限與登入狀態。也就是說,表單只是入口,真正的後台安全性還在後面。 先講 session。Session 的作用,是讓伺服器知道某個使用者已經登入過,所以之後他去看...
很多人做第一個 Flask 後台時,常常會先有登入頁、帳號欄位、密碼欄位,看起來好像就已經有後台了。但真正有沒有登入系統,不只是看有沒有表單,而是你有沒有處理 session、權限與登入狀態。也就是說,表單只是入口,真正的後台安全性還在後面。
先講 session。Session 的作用,是讓伺服器知道某個使用者已經登入過,所以之後他去看後台頁面時,不需要每次重新輸入密碼。Flask 會透過 `session` 這個物件,讓你在登入成功後記錄狀態,例如 `session['admin_logged_in'] = True`。之後再透過條件判斷,決定某些頁面能不能被存取。
這也是為什麼 `SECRET_KEY` 很重要。因為 Flask 的 session 機制需要依賴它來保護資料。如果你的 `SECRET_KEY` 太弱、寫死在公開程式碼,或一直用開發預設值,登入相關機制的風險就會提高。
再來是權限。很多小站一開始的權限需求其實不複雜,可能只有「一般訪客」和「管理者」兩種。這種情況下,最基本的作法通常是寫一個裝飾器,例如 `login_required`,讓沒有登入的人不能進後台。也就是說,登入頁不是重點,重點是後台頁面能不能被保護起來。
例如概念上你會有這種流程:
使用者送出帳號密碼
驗證成功後寫入 session
後台頁檢查 session 是否存在
沒有登入就導回登入頁這樣的流程才算是一套基本的登入邏輯。
再往下一步,你還會碰到幾個重要問題。第一,密碼不能只用明碼比對,正式站至少要做雜湊。第二,要有登出機制,讓 session 可以清掉。第三,如果網站開始有不同角色,例如作者、編輯、管理員,那權限就不能只用一個布林值處理,而要進一步分角色。
對很多 Flask 小站來說,一開始做到最基本的 session 登入與後台保護就很有幫助了。因為這代表你的後台不再只是「看起來像後台」,而是真的有最基本的存取控制。
所以如果你正在做內容站、文章站或小型管理後台,登入系統真正要理解的,不只是表單怎麼送,而是登入成功後狀態怎麼維持、哪些頁面該限制、權限怎麼分。這些觀念一旦弄懂,之後你要擴充會員、作者系統或多角色管理就會容易很多。