在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  HTML/ 關(guān)于一個(gè)人獲得多個(gè)token的問題

關(guān)于一個(gè)人獲得多個(gè)token的問題

A在B電腦上登錄后獲得一個(gè)token,然后A又在C電腦上登錄獲得一個(gè)token,現(xiàn)在A就有兩個(gè)token了,這樣有什么辦法讓之前的token失效?否則兩臺電腦都可以登錄,主流辦法是怎么解決這個(gè)問題的?

回答
編輯回答
浪婳

token和user 一一對應(yīng)。 同一個(gè)賬戶新生成token的時(shí)候,原有的刪除了或者失效 就可以了。

2017年3月14日 20:46
編輯回答
墨小白

一般普遍的token存儲辦法就是在緩存中存儲,比如redis,好的,根據(jù)你的業(yè)務(wù)需求,其實(shí)也算是最簡單的需求了:

token='xxxxx';
// 假設(shè)拿到了user編號
userId = 3;

redis.set(token, userId);

我們設(shè)置了這個(gè)token對應(yīng)的用戶,這是最基本的。現(xiàn)在需要拿到用戶上一次的token,那其實(shí)沒啥含量,反向設(shè)置一次即可

token='xxxxx';
// 假設(shè)拿到了user編號
userId = 3;

redis.set(token, userId);

// 找到舊的token并刪除
oldToken = redis.get('token_map_' + userId);

if (oldToken) {
  redis.delete(oldToken);
}

// 覆蓋舊的token
redis.set('token_map_' + userId, token);

還有一個(gè)方案,就是其實(shí)不需要主動刪原來的token:

token='xxxxx';
// 假設(shè)拿到了user編號
userId = 3;

redis.set(token, userId);
redis.set('current_token' + userId, token);

然后訪問接口的時(shí)候,第一步判斷token是否在redis,第二步判斷token與current_token對應(yīng)的token是否一致,一致就通過。這樣可以巧妙的拋棄原先的token。

不是復(fù)雜的賬號系統(tǒng),所以不需要過度設(shè)計(jì)

2018年8月15日 16:50
編輯回答
命于你

如果只有純粹的 jwt 的話,做不到覆蓋 token 的功能。想要 覆蓋token,需要結(jié)合 session 來達(dá)到,session 可以用 redis甚至直接就sql數(shù)據(jù)庫 去做。。。

2017年1月17日 15:37
編輯回答
解夏

當(dāng)然要后臺維護(hù)token,不然呢??

2018年1月26日 09:24
編輯回答
苦妄

要想實(shí)現(xiàn)單點(diǎn)登錄,必須要后臺維護(hù)token,偷不了懶的

2017年2月6日 20:11
編輯回答
傲寒

難道不是 A 登錄后直接用新 token 覆蓋掉舊 token 嗎?

user.token = newToken,這樣一來舊 Token 自然無法通過驗(yàn)證。

難道你們的業(yè)務(wù)邏輯允許同一個(gè)用戶在多個(gè)地方同時(shí)登錄?

2017年5月28日 19:37