疯狂的狮子Li
2023-07-02 06588f3ad4cdc711cd349fbca25e43960bcb8562
ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java
ÎļþÃû´Ó 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 å®¢æˆ·ç«¯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());
        }
@@ -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());
    }
}