diff --git a/internal/logic/public/user/unbindDeviceLogic.go b/internal/logic/public/user/unbindDeviceLogic.go index 9e32057..8f9dfe9 100644 --- a/internal/logic/public/user/unbindDeviceLogic.go +++ b/internal/logic/public/user/unbindDeviceLogic.go @@ -66,10 +66,10 @@ func (l *UnbindDeviceLogic) UnbindDevice(req *types.UnbindDeviceRequest) error { } currentSessionID, _ := l.ctx.Value(constant.CtxKeySessionID).(string) - return l.logoutUnbind(targetUser, device, currentSessionID) + return l.logoutUnbind(userInfo.Id, targetUser, device, currentSessionID) } -func (l *UnbindDeviceLogic) logoutUnbind(userInfo *user.User, device *user.Device, currentSessionID string) error { +func (l *UnbindDeviceLogic) logoutUnbind(kickerUserID int64, userInfo *user.User, device *user.Device, currentSessionID string) error { // 1. 事务前查出 AuthMethods,用于事务后清邮箱缓存 authMethods, _ := l.svcCtx.UserModel.FindUserAuthMethods(l.ctx, userInfo.Id) @@ -210,7 +210,7 @@ func (l *UnbindDeviceLogic) logoutUnbind(userInfo *user.User, device *user.Devic // 7. 清除该用户所有 session(旧 token 全部失效) l.clearAllSessions(userInfo.Id) - // 8. 清理受影响的家庭成员缓存 + 踢设备 + 清 session + // 8. 清理受影响的家庭成员缓存 + 踢设备 + 清 session(跳过踢人者自己) for _, memberID := range familyMemberIDs { if memberUser, findErr := l.svcCtx.UserModel.FindOne(l.ctx, memberID); findErr == nil { if clearErr := l.svcCtx.UserModel.ClearUserCache(l.ctx, memberUser); clearErr != nil { @@ -221,6 +221,11 @@ func (l *UnbindDeviceLogic) logoutUnbind(userInfo *user.User, device *user.Devic } } + // 踢人者只需刷新缓存,不踢设备、不清 session + if memberID == kickerUserID { + continue + } + // 踢该成员的所有在线设备 var memberDevices []user.Device l.svcCtx.DB.WithContext(l.ctx).