From 06588f3ad4cdc711cd349fbca25e43960bcb8562 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期日, 02 七月 2023 16:13:14 +0800 Subject: [PATCH] update 优化 !pr382 修复一些问题 完事流程逻辑 --- ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java | 64 +++++++++++++++++++------------- 1 files changed, 38 insertions(+), 26 deletions(-) diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/socialAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java similarity index 66% rename from ruoyi-admin/src/main/java/org/dromara/web/service/impl/socialAuthStrategy.java rename to ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java index c7599eb..f71bc9f 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/socialAuthStrategy.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java @@ -11,17 +11,21 @@ import me.zhyd.oauth.model.AuthUser; import org.dromara.common.core.constant.Constants; import org.dromara.common.core.domain.model.LoginBody; -import org.dromara.common.core.domain.model.SocialLogin; +import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.core.enums.UserStatus; import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.exception.user.UserException; import org.dromara.common.core.utils.MessageUtils; import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.core.validate.auth.SocialGroup; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.social.config.properties.SocialProperties; import org.dromara.common.social.utils.SocialUtils; +import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.system.domain.SysClient; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.vo.SysSocialVo; +import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.mapper.SysUserMapper; import org.dromara.system.service.ISysSocialService; import org.dromara.web.domain.vo.LoginVo; @@ -37,7 +41,7 @@ @Slf4j @Service("social" + IAuthStrategy.BASE_NAME) @RequiredArgsConstructor -public class socialAuthStrategy implements IAuthStrategy { +public class SocialAuthStrategy implements IAuthStrategy { private final SocialProperties socialProperties; private final ISysSocialService sysSocialService; @@ -52,13 +56,14 @@ /** * 鐧诲綍-绗笁鏂规巿鏉冪櫥褰� - * @param clientId 瀹㈡埛绔痠d + * + * @param clientId 瀹㈡埛绔痠d * @param loginBody 鐧诲綍淇℃伅 - * @param client 瀹㈡埛绔俊鎭� + * @param client 瀹㈡埛绔俊鎭� */ @Override public LoginVo login(String clientId, LoginBody loginBody, SysClient client) { - AuthResponse<AuthUser> response = SocialUtils.loginAuth(loginBody,socialProperties); + AuthResponse<AuthUser> response = SocialUtils.loginAuth(loginBody, socialProperties); if (!response.ok()) { throw new ServiceException(response.getMsg()); } @@ -66,30 +71,19 @@ SysSocialVo social = sysSocialService.selectByAuthId(authUserData.getSource() + authUserData.getUuid()); if (!ObjectUtil.isNotNull(social)) { throw new ServiceException("浣犺繕娌℃湁缁戝畾绗笁鏂硅处鍙凤紝缁戝畾鍚庢墠鍙互鐧诲綍锛�"); - }//楠岃瘉鎺堟潈琛ㄩ噷闈㈢殑绉熸埛id鏄惁鍖呭惈褰撳墠绉熸埛id - if (ObjectUtil.isNotNull(social) && StrUtil.isNotBlank(social.getTenantId()) - && !social.getTenantId().contains(loginBody.getTenantId())) { + } + // 楠岃瘉鎺堟潈琛ㄩ噷闈㈢殑绉熸埛id鏄惁鍖呭惈褰撳墠绉熸埛id + String tenantId = social.getTenantId(); + if (ObjectUtil.isNotNull(social) && StrUtil.isNotBlank(tenantId) + && !tenantId.contains(loginBody.getTenantId())) { throw new ServiceException("瀵逛笉璧凤紝浣犳病鏈夋潈闄愮櫥褰曞綋鍓嶇鎴凤紒"); } - return loadinUser(social, client); - } - /** - * 鐧诲綍鐢ㄦ埛淇℃伅 - * - * @param social - * @param client - * @return - */ - private LoginVo loadinUser(SysSocialVo social, SysClient client) { - SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>() - .eq(SysUser::getUserId, social.getUserId())); - SocialLogin loginUser = new SocialLogin(); - loginUser.setUserId(user.getUserId()); - loginUser.setTenantId(user.getTenantId()); - loginUser.setUsername(user.getUserName()); - loginUser.setUserType(user.getUserType()); - // 鎵ц鐧诲綍 + // 鏌ユ壘鐢ㄦ埛 + SysUserVo user = loadUser(tenantId, social.getUserId()); + + // 姝ゅ鍙牴鎹櫥褰曠敤鎴风殑鏁版嵁涓嶅悓 鑷鍒涘缓 loginUser 灞炴�т笉澶熺敤缁ф壙鎵╁睍灏辫浜� + LoginUser loginUser = loginService.buildLoginUser(user); SaLoginModel model = new SaLoginModel(); model.setDevice(client.getDeviceType()); // 鑷畾涔夊垎閰� 涓嶅悓鐢ㄦ埛浣撶郴 涓嶅悓 token 鎺堟潈鏃堕棿 涓嶈缃粯璁よ蛋鍏ㄥ眬 yml 閰嶇疆 @@ -106,4 +100,22 @@ return loginVo; } + private SysUserVo loadUser(String tenantId, Long userId) { + SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>() + .select(SysUser::getUserName, SysUser::getStatus) + .eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId) + .eq(SysUser::getUserId, userId)); + if (ObjectUtil.isNull(user)) { + log.info("鐧诲綍鐢ㄦ埛锛歿} 涓嶅瓨鍦�.", ""); + throw new UserException("user.not.exists", ""); + } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { + log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍋滅敤.", ""); + throw new UserException("user.blocked", ""); + } + if (TenantHelper.isEnable()) { + return userMapper.selectTenantUserByUserName(user.getUserName(), tenantId); + } + return userMapper.selectUserByUserName(user.getUserName()); + } + } -- Gitblit v1.9.3