1. 程式人生 > 其它 >nodejs 實現一個賬號只能一臺裝置登入

nodejs 實現一個賬號只能一臺裝置登入

思路:

  框架使用前端使用 vue 框架,後端nodejs開發

  在實現一個賬號一臺裝置登入的情況下,我使用了 webJsonToken 外掛。

  第一步:在建立資料庫表時,在使用者表新建一個欄位 webJSONToken (該欄位用於記錄使用者登入狀態)

  第二步:在使用者登入賬號時生成webJSONToken(生成的webJSONToken時可以使用使用者資訊,後面會用到),然後把生成的webJSONToken存入到該賬戶的 “webJSONToken” 欄位在中(這裡需要同步執行,先判斷是否登入成功,成功 生成token,在儲存到資料庫,然後響應登入成功token)

  第三步:前端需要在登入成功之後,獲取到響應的webJSONToken儲存到本地,在每次介面請求時都在header中攜帶token (我使用 請求攔截axios.interceptors.request 實現每次請求頭新增token)

  第四步:後臺設定請求攔截,每次請求都去判斷該賬號登入攜帶 webJSONToken(攜帶的webJSONToken 中包含了該使用者的資訊) 和 資料庫的 webJSONToken是否一致,不一致重定向到登入頁面刪除本地token返回token不一致讓前端處理 (這裡請求攔截,登入、註冊介面沒有必要去攔截,進行判斷一下)

  解釋第四步:我登入的賬號本地儲存的 webJSONToken 和 資料庫儲存的webJSONToken 肯定一樣啊,因為登入介面生成的token儲存到資料庫、和本地? (如果 A 使用者登入了 B 賬號,此時本地儲存 token T,資料庫儲存 token T

,然後 C 使用者再次登入了 B 賬號,此時 C 使用者本地儲存 token K,資料庫儲存 token KA使用者再次請求介面時,攜帶的token T 和 資料庫的 token K不一致,退出登入狀態)

  注:如果選擇的服務端重定向就不用看第五步了

  第五步返回token不一致讓前端處理: (這裡為什麼不直接重定向,因為我想讓前臺知道token不一致,做一個彈框提示在跳轉,而不是直接跳轉到登入頁面) 這裡後臺返回了token不一致,我們要去接收這個狀態做處理,我使用axios.interceptors.response 響應攔截判斷響應 token 是否不一致,這裡也要注意 請求介面 和 註冊介面要過濾掉,如果 token不一致 刪除本地token、彈出框提示、跳轉到登入頁面 (這裡 token不一致,不用在乎token是否過期,因為不一致證明你的賬號被人擠掉了)。

程式碼片段:

  第一步:在建立資料庫表時,在使用者表新建一個欄位 webJSONToken (該欄位用於記錄使用者登入狀態)

  

  

  第二步:在使用者登入賬號時生成webJSONToken

  

  第三步:前端需要在登入成功之後,獲取到響應的webJSONToken儲存到本地,在每次介面請求時都在header中攜帶token

  

  第四步:後臺設定請求攔截,每次請求都去判斷該賬號登入攜帶 webJSONToken

  

  

  第五步:返回token不一致讓前端處理