From e4b405491fa2ba0ede349b8f92b5b86172e2da3a Mon Sep 17 00:00:00 2001 From: thiszhc <2029364173@qq.com> Date: 星期六, 10 六月 2023 21:39:31 +0800 Subject: [PATCH] 新增加第三方登录授权功能 --- ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java | 65 ++++++++++++++++++++++++++++++++ 1 files changed, 65 insertions(+), 0 deletions(-) diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java index 689a55d..b152710 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java @@ -6,11 +6,15 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import me.zhyd.oauth.model.AuthResponse; +import me.zhyd.oauth.model.AuthUser; import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.constant.TenantConstants; +import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.dto.RoleDTO; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.XcxLoginUser; @@ -28,6 +32,7 @@ import org.dromara.common.tenant.exception.TenantException; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.web.config.properties.CaptchaProperties; +import org.dromara.system.domain.SysAuthUser; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.vo.SysTenantVo; import org.dromara.system.domain.vo.SysUserVo; @@ -37,6 +42,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.io.IOException; import java.time.Duration; import java.util.Date; import java.util.List; @@ -154,6 +160,65 @@ return StpUtil.getTokenValue(); } + + /** + * 璁よ瘉鎺堟潈鐧诲綍 + * @param source + * @throws IOException + */ + /** + * 绀句氦鐧诲綍 + * @param source 鐧诲綍鏉ユ簮 + * @param authUser 鎺堟潈鍝嶅簲瀹炰綋 + * @param request Http璇锋眰瀵硅薄 + * @return 缁熶竴鍝嶅簲瀹炰綋 + * @throws IOException + */ + public R<String> socialLogin(String source, AuthResponse<AuthUser> authUser, HttpServletRequest request) throws IOException { + // 鍒ゆ柇鎺堟潈鍝嶅簲鏄惁鎴愬姛 + if (!authUser.ok()) { + return R.fail("瀵逛笉璧凤紝鎺堟潈淇℃伅楠岃瘉涓嶉�氳繃锛岃鑱旂郴绠$悊鍛�"); + } + AuthUser authUserData = authUser.getData(); + // 鍒ゆ柇鏁版嵁搴撲腑鏄惁宸插瓨鍦ㄨ鐢ㄦ埛 + SysUserVo user = userMapper.selectAuthUserByUuid(source + authUserData.getUuid()); + if (ObjectUtil.isNotNull(user)) { + checkTenant(user.getTenantId()); + SysUserVo dbUser = loadUserByUsername(user.getTenantId(), user.getUserName()); + // 鐧诲綍 + LoginHelper.loginByDevice(buildLoginUser(dbUser), DeviceType.auth); + recordLogininfor(dbUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); + recordLoginInfo(user.getUserId()); + return R.ok(StpUtil.getTokenValue()); + } else { + if (LoginHelper.getUserId() == null) { + return R.fail("鎺堟潈澶辫触锛岃鍏堢櫥褰曞啀缁戝畾"); + } + // 缁勮鎺堟潈鐢ㄦ埛淇℃伅 + SysAuthUser sysAuthUser = new SysAuthUser(); + sysAuthUser.setAvatar(authUserData.getAvatar()); + sysAuthUser.setUuid(source + authUserData.getUuid()); + sysAuthUser.setUserId(LoginHelper.getUserId()); + sysAuthUser.setUserName(authUserData.getUsername()); + sysAuthUser.setNickName(authUserData.getNickname()); + sysAuthUser.setEmail(authUserData.getEmail()); + sysAuthUser.setSource(source); + sysAuthUser.setCreateTime(new Date().toString()); + // 鏂扮敤鎴凤紝缁戝畾绗笁鏂硅处鍙� + userMapper.insertAuthUser(sysAuthUser); + SysUserVo lodingData = loadUserByUsername(LoginHelper.getTenantId(), LoginHelper.getUsername()); + checkTenant(lodingData.getTenantId()); + LoginHelper.loginByDevice(buildLoginUser(lodingData), DeviceType.auth); + recordLogininfor(lodingData.getTenantId(), sysAuthUser.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); + recordLoginInfo(sysAuthUser.getUserId()); + return R.ok(StpUtil.getTokenValue()); + } + } + + + + + /** * 閫�鍑虹櫥褰� */ -- Gitblit v1.9.3