ÎļþÃû´Ó ruoyi-admin/src/main/java/org/dromara/web/service/impl/socialAuthStrategy.java ÐÞ¸Ä |
| | |
| | | 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; |
| | |
| | | @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; |
| | |
| | | |
| | | /** |
| | | * ç»å½-ç¬¬ä¸æ¹ææç»å½ |
| | | * @param clientId 客æ·ç«¯id |
| | | * |
| | | * @param clientId 客æ·ç«¯id |
| | | * @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()); |
| | | } |
| | |
| | | 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 é
ç½® |
| | |
| | | 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()); |
| | | } |
| | | |
| | | } |