diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteSocialService.java b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteSocialService.java index 6c348b8c..ff61c12b 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteSocialService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteSocialService.java @@ -3,6 +3,8 @@ package org.dromara.system.api; import org.dromara.system.api.domain.bo.RemoteSocialBo; import org.dromara.system.api.domain.vo.RemoteSocialVo; +import java.util.List; + /** * 社会化关系服务 * @@ -13,7 +15,7 @@ public interface RemoteSocialService { /** * 根据 authId 查询用户信息 */ - RemoteSocialVo selectByAuthId(String authId); + List selectByAuthId(String authId); /** * 保存社会化关系 diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/service/SysLoginService.java b/ruoyi-auth/src/main/java/org/dromara/auth/service/SysLoginService.java index 24ebeb57..f1f6d224 100644 --- a/ruoyi-auth/src/main/java/org/dromara/auth/service/SysLoginService.java +++ b/ruoyi-auth/src/main/java/org/dromara/auth/service/SysLoginService.java @@ -4,6 +4,7 @@ import cn.dev33.satoken.exception.NotLoginException; import cn.dev33.satoken.secure.BCrypt; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -43,6 +44,7 @@ import org.springframework.stereotype.Service; import java.time.Duration; import java.util.Date; +import java.util.List; import java.util.function.Supplier; /** @@ -83,13 +85,13 @@ public class SysLoginService { bo.setUserName(authUserData.getUsername()); bo.setNickName(authUserData.getNickname()); // 查询是否已经绑定用户 - RemoteSocialVo vo = remoteSocialService.selectByAuthId(authId); - if (ObjectUtil.isEmpty(vo)) { + List list = remoteSocialService.selectByAuthId(authId); + if (CollUtil.isEmpty(list)) { // 没有绑定用户, 新增用户信息 remoteSocialService.insertByBo(bo); } else { // 更新用户信息 - bo.setId(vo.getId()); + bo.setId(list.get(0).getId()); remoteSocialService.updateByBo(bo); } } diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/service/impl/SocialAuthStrategy.java b/ruoyi-auth/src/main/java/org/dromara/auth/service/impl/SocialAuthStrategy.java index f0173d4d..ea1bde11 100644 --- a/ruoyi-auth/src/main/java/org/dromara/auth/service/impl/SocialAuthStrategy.java +++ b/ruoyi-auth/src/main/java/org/dromara/auth/service/impl/SocialAuthStrategy.java @@ -2,9 +2,8 @@ package org.dromara.auth.service.impl; import cn.dev33.satoken.stp.SaLoginModel; import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import cn.hutool.http.Method; import lombok.RequiredArgsConstructor; @@ -29,6 +28,9 @@ import org.dromara.system.api.domain.vo.RemoteSocialVo; import org.dromara.system.api.model.LoginUser; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Optional; + /** * 第三方授权策略 * @@ -50,7 +52,6 @@ public class SocialAuthStrategy implements IAuthStrategy { /** * 登录-第三方授权登录 * - * @param clientId 客户端id * @param body 登录信息 * @param client 客户端信息 */ @@ -75,18 +76,17 @@ public class SocialAuthStrategy implements IAuthStrategy { .executeAsync(); } - RemoteSocialVo socialVo = remoteSocialService.selectByAuthId(authUserData.getSource() + authUserData.getUuid()); - if (!ObjectUtil.isNotNull(socialVo)) { + List list = remoteSocialService.selectByAuthId(authUserData.getSource() + authUserData.getUuid()); + if (CollUtil.isEmpty(list)) { throw new ServiceException("你还没有绑定第三方账号,绑定后才可以登录!"); } - // 验证授权表里面的租户id是否包含当前租户id - String tenantId = socialVo.getTenantId(); - if (ObjectUtil.isNotNull(socialVo) && StrUtil.isNotBlank(tenantId) - && !tenantId.contains(loginBody.getTenantId())) { + Optional opt = list.stream().filter(x -> x.getTenantId().equals(loginBody.getTenantId())).findAny(); + if (opt.isEmpty()) { throw new ServiceException("对不起,你没有权限登录当前租户!"); } + RemoteSocialVo socialVo = opt.get(); - LoginUser loginUser = remoteUserService.getUserInfo(socialVo.getUserId(), tenantId); + LoginUser loginUser = remoteUserService.getUserInfo(socialVo.getUserId(), socialVo.getTenantId()); loginUser.setClientKey(client.getClientKey()); loginUser.setDeviceType(client.getDeviceType()); SaLoginModel model = new SaLoginModel(); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteSocialServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteSocialServiceImpl.java index 85bb43cf..3ddef24b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteSocialServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteSocialServiceImpl.java @@ -6,13 +6,14 @@ import org.dromara.common.core.utils.MapstructUtils; import org.dromara.system.api.RemoteSocialService; import org.dromara.system.api.domain.bo.RemoteSocialBo; import org.dromara.system.api.domain.vo.RemoteSocialVo; -import org.dromara.system.domain.SysSocial; import org.dromara.system.domain.bo.SysSocialBo; import org.dromara.system.domain.vo.SysSocialVo; import org.dromara.system.mapper.SysSocialMapper; import org.dromara.system.service.ISysSocialService; import org.springframework.stereotype.Service; +import java.util.List; + /** * 社会化关系服务 * @@ -30,9 +31,9 @@ public class RemoteSocialServiceImpl implements RemoteSocialService { * 根据 authId 查询用户信息 */ @Override - public RemoteSocialVo selectByAuthId(String authId) { - SysSocialVo socialVo = sysSocialService.selectByAuthId(authId); - return MapstructUtils.convert(socialVo, RemoteSocialVo.class); + public List selectByAuthId(String authId) { + List list = sysSocialService.selectByAuthId(authId); + return MapstructUtils.convert(list, RemoteSocialVo.class); } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java index abcf6d1f..0950b600 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java @@ -50,7 +50,7 @@ public interface ISysSocialService { * @param authId 认证ID * @return SysSocial */ - SysSocialVo selectByAuthId(String authId); + List selectByAuthId(String authId); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java index 83834efa..a35a7088 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java @@ -100,8 +100,8 @@ public class SysSocialServiceImpl implements ISysSocialService { * @return 授权信息 */ @Override - public SysSocialVo selectByAuthId(String authId) { - return baseMapper.selectVoOne(new LambdaQueryWrapper().eq(SysSocial::getAuthId, authId)); + public List selectByAuthId(String authId) { + return baseMapper.selectVoList(new LambdaQueryWrapper().eq(SysSocial::getAuthId, authId)); } }