|
|
@@ -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;
|
|
|
}
|