免费在线a视频-免费在线观看a视频-免费在线观看大片影视大全-免费在线观看的视频-色播丁香-色播基地

面試題:如何限制一個賬號只能在一處登錄?

:2025年02月08日 腳本之家
分享到:

限制賬號只能在一處登錄的技術(shù)方案是基于 Token 版本控制。在新設(shè)備登錄時,將舊 Token 更新到數(shù)據(jù)庫,并生成新的 Token。

djEvODY1NVFXdnMxUkliLXp4NGI3enVWWGxIVm1JbWVUejJXM1NsWUs5bDFVaUpXdWxieHd5UE40bnZlWG1KRTlxYnFucXZZSUV6QUpIUEdjZWFMM2pPUjFfNl9ya2oxaXk1bVZqR01XNzhoSjQ9.jpg

來源丨程序員Sunday(ID:gh_255b41b1f634)

昨天,有位同學(xué)在面試的過程中被問到了一個很有意思的問題:【如何限制一個賬號只能在一處登錄?】,既:單設(shè)備登錄

PS:很多同學(xué)會把 單設(shè)備登錄 和 單點登錄 搞混,但是他們之間本質(zhì)上是不一樣的。

  • 單設(shè)備登錄:同一賬號 在同一時間只能在一個設(shè)備上登錄,如果用戶在另一臺設(shè)備上登錄,則之前的設(shè)備會被自動下線。

  • 單點登錄(SSO):用戶在多個系統(tǒng)或應(yīng)用之間只需要登錄一次,就可以訪問所有相關(guān)系統(tǒng),無需再次輸入憑據(jù)。

言歸正傳,咱們回到當(dāng)前面試題本身 如何限制一個賬號只能在一處登錄?

技術(shù)方案

要實現(xiàn) 單設(shè)備登錄,我們需要設(shè)立一種機制,確保同一賬號在不同設(shè)備上不能同時保持活躍。

常見的實現(xiàn)方式僅從前端角度來說的話,主要有兩種:

1:基于 Token 版本控制(推薦)

核心思想:Token 版本號(token_version)充當(dāng)唯一憑證,每次新設(shè)備登錄時,版本號 +1,舊 Token 失效。

我們來拆解下這個流程:

首先第一步:用戶首次登錄

  • 用戶登錄后,數(shù)據(jù)庫中的 token_version 設(shè)為 1。

  • 后端生成 JWT Token,并在 payload 中加入 { userId: 1, tokenVersion: 1 }。

  • 返回 Token 給前端,前端存儲在 localStorage 或 Authorization 頭中。

然后第二步:用戶在新設(shè)備登錄

  • 新設(shè)備登錄后,后端查詢該用戶的 token_version,然后 +1,更新到數(shù)據(jù)庫(如 token_version=2)。

  • 生成新的 Token { userId: 1, tokenVersion: 2 },返回給新設(shè)備。

第三步:舊設(shè)備攜帶 Token 訪問接口

  • 舊設(shè)備的 Token 仍然是 { userId: 1, tokenVersion: 1 },但數(shù)據(jù)庫中 token_version=2。

  • 服務(wù)器驗證 Token,發(fā)現(xiàn) tokenVersion !== 數(shù)據(jù)庫的 token_version,返回 401,拒絕訪問。

第四步:舊設(shè)備強制下線

  • 舊設(shè)備前端收到 401 響應(yīng)后:

  • 清除本地 Token

  • 跳轉(zhuǎn)到登錄頁

  • 提示 "賬號已在其他設(shè)備登錄,請重新登錄"

以上方案是實現(xiàn) 單設(shè)備登錄 最簡單的方案,核心就是維護(hù)了 token_version 的版本值

2:基于 WebSocket 的實時強制下線

核心思想每次用戶在新設(shè)備登錄時,服務(wù)器通過 WebSocket 通知舊設(shè)備下線,舊設(shè)備收到消息后清除 Token 并強制登出。

咱們通常拆解下這個流程:

首先第一步:用戶首次登錄

  • 用戶登錄后,服務(wù)器建立 WebSocket 連接,并在 Redis 或者 數(shù)據(jù)庫中存儲對應(yīng)狀態(tài),如:{ userId: 1, socketId: "xyz123" } 以記錄該設(shè)備的 WebSocket 連接 ID。

然后第二步:用戶在新設(shè)備登錄

  • 新設(shè)備登錄后,服務(wù)器檢測到該用戶已有活躍連接。

  • 給舊設(shè)備發(fā)送 WebSocket 消息:"你的賬號已在其他設(shè)備登錄,請重新登錄"

  • 刪除舊設(shè)備的 WebSocket 連接記錄

  • 新設(shè)備建立 WebSocket 連接,存儲 { userId: 1, socketId: "abc456" }。

第三步:舊設(shè)備收到 WebSocket 消息

  • 舊設(shè)備監(jiān)聽到 "被踢下線" 消息:

  • 清除本地 Token

  • 自動跳轉(zhuǎn)到登錄頁

  • 提示 "賬號已在其他設(shè)備登錄"

與上一個相比,這里核心就是利用了 WebSocket 雙向通訊 的能力來實現(xiàn) 強制下線 的功能,好處是可以做到 即時響應(yīng)。麻煩的地方是需要重新對接 ws 協(xié)議。

我們可以通過以下表格來對比下兩種方案的差異:

方案優(yōu)勢劣勢
基于 Token 版本控制邏輯簡單,后端維護(hù) Token 版本即可,兼容性好需要前端主動處理401,可能有短暫的延遲
基于 WebSocket 實時強制下線即時性強,用戶體驗更好需要 WebSocket 連接,維護(hù)連接狀態(tài),斷連時需要額外處理

當(dāng)然,這兩種方案也可以結(jié)合起來進(jìn)行使用:

以 WebSocket 優(yōu)先,當(dāng) WebSocket 連接異常時,后端回退到 Token 版本校驗。這樣既能 保證即時強制下線,也能 兼容不支持 WebSocket 的場景

原文來源:https://mp.weixin.qq.com/s/4qgOIS6CIT8Pn6rjr9HvYQ

[我要糾錯]
[ 編輯:宋聰喬 &發(fā)表于江蘇 ]
關(guān)鍵詞: 來源 程序員 Sunday 255b41b1f634 昨天

來源:本文內(nèi)容搜集或轉(zhuǎn)自各大網(wǎng)絡(luò)平臺,并已注明來源、出處,如果轉(zhuǎn)載侵犯您的版權(quán)或非授權(quán)發(fā)布,請聯(lián)系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內(nèi)容的準(zhǔn)確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負(fù)責(zé),僅作分享之用,文章版權(quán)及插圖屬于原作者。

點個贊
0
踩一腳
0

您在閱讀:面試題:如何限制一個賬號只能在一處登錄?

Copyright©2013-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發(fā)布查詢平臺保留所有權(quán)利

蘇公網(wǎng)安備32010402000125 蘇ICP備14051488號-3技術(shù)支持:南京博盛藍(lán)睿網(wǎng)絡(luò)科技有限公司

南京思必達(dá)教育科技有限公司版權(quán)所有   百度統(tǒng)計

主站蜘蛛池模板: 免费看国产一级片 | 天天插天天色 | 欧美成人免费在线观看 | 看欧美一级片 | 日韩毛片免费在线观看 | 黄色一级视频欧美 | 意大利极品xxxxhd | 亚洲日本va中文字幕在线不卡 | 色综合区 | 欧美日韩在线不卡 | 2020在线不卡观看视频 | 老司机午夜精品视频播放 | 国产日产亚洲系列首页 | 国产91精品不卡在线 | 特黄特色一级aa毛片免费观看 | 欧美视频第一区 | 最新日韩在线观看 | 五月香婷婷 | 日韩精品一区二区三区毛片 | 最近最中文字幕视频 | 国产啪精品视频网免费 | 福利三级 | 男人香蕉好大好爽视频 | 你懂的国产高清在线播放视频 | 日韩在线观看视频免费 | 好吊色青青青国产在线播放 | 免费成年人在线观看视频 | aa级黄色毛片 | freexxxx性中国hd| 欧美第一页草草影院 | 2020国产欧洲精品视频 | 一级特色黄大片 | 一级片视频在线 | 欧美成人亚洲 | 亚洲精品成人久久 | 天天干天天色综合 | 国产在线不卡视频 | 天堂黄色 | 午夜视频福利在线 | 91精品久久久久久久久中文字幕 | 日韩不卡一区二区三区 |
最熱文章
最新文章
  • 阿里云上云鉅惠,云產(chǎn)品享最低成本,有需要聯(lián)系,
  • 卡爾蔡司鏡片優(yōu)惠店,鏡片價格低
  • 蘋果原裝手機殼