Explorar o código

维护小程序token存储地址

lutong hai 2 meses
pai
achega
29aab77dca

+ 10 - 9
alien-dining/src/main/java/shop/alien/dining/service/impl/DiningUserServiceImpl.java

@@ -52,11 +52,11 @@ public class DiningUserServiceImpl implements DiningUserService {
     private String effectiveTime;
 
     /**
-     * Redis key 常量
+     * Redis key 常量(小程序专用,避免与 APP 端冲突)
      */
     private static final String REDIS_KEY_OPENID_PREFIX = "wechat:openid:";
-    private static final String REDIS_KEY_TOKEN_PREFIX = "user_token:";
-    private static final String REDIS_KEY_USER_PHONE_PREFIX = "user_";
+    private static final String REDIS_KEY_TOKEN_PREFIX = "miniprogram_user_token:";
+    private static final String REDIS_KEY_USER_PHONE_PREFIX = "miniprogram_user_";
     private static final long OPENID_MAPPING_EXPIRE_SECONDS = 30 * 24 * 60 * 60L; // 30天
     private static final long TOKEN_EXPIRE_SECONDS = 7 * 24 * 60 * 60L; // 7天
 
@@ -470,9 +470,10 @@ public class DiningUserServiceImpl implements DiningUserService {
             return null;
         }
 
-        // 6. 清除旧手机号对应 token,强制重新登录
-        baseRedisService.delete("user_" + oldPhone);
-        log.info("更换手机号成功, userId={}, oldPhone={}, newPhone={}", dto.getUserId(), oldPhone, newPhone);
+        // 6. 只清除小程序旧手机号对应的 token,APP 的 token 保持不变
+        // 因为小程序更换手机号只影响小程序平台,APP 可以继续使用旧手机号登录
+        baseRedisService.delete(REDIS_KEY_USER_PHONE_PREFIX + oldPhone);
+        log.info("更换手机号成功, userId={}, oldPhone={}, newPhone={}(仅清除小程序 token,APP token 保持不变)", dto.getUserId(), oldPhone, newPhone);
 
         return buildDiningUserVo(user);
     }
@@ -519,11 +520,11 @@ public class DiningUserServiceImpl implements DiningUserService {
             String userIdStr = tokenInfo.getString("userId");
             String userName = tokenInfo.getString("userName");
 
-            // 5. 验证 Redis 中是否存在该 token
+            // 5. 验证 Redis 中是否存在该 token(使用小程序专用的 key 前缀)
             boolean tokenExists = false;
             if (StringUtils.isNotBlank(openid)) {
                 // 优先使用 openid 查找
-                String redisToken = baseRedisService.getString("user_token:" + openid);
+                String redisToken = baseRedisService.getString(REDIS_KEY_TOKEN_PREFIX + openid);
                 if (token.equals(redisToken)) {
                     tokenExists = true;
                 }
@@ -531,7 +532,7 @@ public class DiningUserServiceImpl implements DiningUserService {
             
             // 兼容旧版本:通过手机号查找
             if (!tokenExists && StringUtils.isNotBlank(phone)) {
-                String redisToken = baseRedisService.getString("user_" + phone);
+                String redisToken = baseRedisService.getString(REDIS_KEY_USER_PHONE_PREFIX + phone);
                 if (token.equals(redisToken)) {
                     tokenExists = true;
                 }