Redis單點登錄 因為該項目使用的是分布式架構,采用了nginx負載均衡,所以會產生一個問題,每一個服務器都需要開辟一個空間來存儲用戶的信息。使用redis來代替用戶信息存儲空間。 用戶在A機器上登錄,將信息存儲到redis中返回token,並存入時設置key的有效時間。 所有的服務器公用一個redis,每次操作是都是到redis中判斷用戶信息狀態。 單點登錄: Session默認是存儲到當地服務器的內存中 解決方案: 不管在那一台web服務器登錄,都會把token值存放到一個集中管理的redis服務器中,客戶端攜帶token驗證時,會先到redis中獲取,實現登錄。 Jwt單點登錄 jwt本質就是把用戶信息通過加密生成一個字符串。 由頭部、有效載荷、簽名三部分組成 Jwt頭部是一個描述JWT數據的json對象 有效載荷是七個默認字段+自定義私有字段 簽名hax265(base64(header)+”.”+base64(payload),secret) jwt是未加密的,不要包含私密信息。一旦jwt簽發,有效期內一直有效。 服務端把生產的token頒發給客戶端而自己不會保存。 使用jwt技術及私鑰公鑰來實現無需服務器保存用戶登錄信息。 三方登錄 由vue端發送post請求到后端獲取微博的掃描url,django端返回微博的url返回給前端,vue端通過路由跳轉到微博的掃描頁面,微博掃描后攜帶一個code碼值跳轉到vue端的redirect_uri地址上,可以通過code碼到微博訪問掃碼人的微博信息。 前端vue將code碼交給后端,后端攜帶code到微博中驗證用戶信息,信息正確進行一下操作,如果用戶在本客戶端綁定過直接登錄成功,沒有綁定后端返回微博的用戶id到前端。前端vue判斷type狀態,type為零時直接跳轉到首頁反之攜帶微博uid跳轉到綁定頁面。Vue綁定頁面中發送用戶信息、微博uid到后端,后端判斷用戶是否存在,用戶存在綁定用戶信息,用戶不存在時創建用戶並進行綁定。 RBAC RBAC由用戶表、角色表、權限表、資源表組成 RBAC簡單的來說就是角色的訪問控制。 用戶表:用戶信息存儲表 角色表:管理員,學生,老師,校長 權限表:角色和資源的對應關系,這個角色可以訪問那些資源 資源表:通過不同的路由對應不同的資源,表數據的增刪改查。 權限本質是對數據庫中表中數據的增刪改查操作 不同操作根據前端不同路由,通過get、post、put、delete方法操作數據庫表 對權限的控制時判斷該用戶是否擁有該路由的操作權限 把角色和角色之間進行路由和請求進行關聯