1. 程式人生 > 實用技巧 >同平臺不允許同時登陸的方案(不同平臺可同時登陸)

同平臺不允許同時登陸的方案(不同平臺可同時登陸)

專案需求:

現在專案有PC端,WEB端,APP端

同端不允許同時登陸,不同端可以同時登陸

並沒有涉及太多複雜的邏輯,這裡只探討結合Redis進行不同端的登陸控制.

具體方案:

1 - 將token存到redis中

2 - token: 型別-使用者id-隨機數

3 - 使用者登入時根據型別和id刪除原token,寫入新token

4 - 使用者退出時根據型別和id刪除原token

上程式碼:

1 - 登陸

public String login(String phone, String password, String type) {
    User user = getUserByPhone(phone);
    
if (user == null) { return "NOT_FOUND"; } if (!checkPassword(user.getPassword(), password)) { return "PASSWORD_ERROR"; }// 刪除redis中原token deleteToken(user, type); // 生成新token,存redis,返回 return setToken2Redis(user, type); }

2 - 刪除原token

public void deleteToken(User user, String type) {
    String deleteRegex 
= type + "-" + user.getId() + "*"; Set<String> keys = redisTemplate.keys(deleteRegex); redisTemplate.delete(keys); }

3 - 生成新token

public String setToken2Redis(User user, String type) {
    String token = createToken(user, type);
    // 登陸時其它資訊快取...
    return token;
}

儘可能的簡單,只要滿足現在的使用就可以.

因為需求在變,越簡單越容易重構.