From 5110961eb98d820881a7c4a218e9e93fea07870e Mon Sep 17 00:00:00 2001 From: thiszhc <2029364173@qq.com> Date: 星期四, 15 六月 2023 01:23:07 +0800 Subject: [PATCH] 第三方授权登录,加上配置 --- ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java | 87 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 87 insertions(+), 0 deletions(-) diff --git a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java index bba6113..f46cbdc 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java @@ -2,9 +2,18 @@ import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSON; +import cn.hutool.json.JSONUtil; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.constraints.NotBlank; import lombok.RequiredArgsConstructor; +import me.zhyd.oauth.cache.AuthStateCache; +import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthResponse; +import me.zhyd.oauth.model.AuthUser; +import me.zhyd.oauth.request.AuthRequest; +import me.zhyd.oauth.utils.AuthStateUtils; import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.model.EmailLoginBody; import org.dromara.common.core.domain.model.LoginBody; @@ -13,9 +22,16 @@ import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.social.config.SocialConfig; +import org.dromara.common.social.config.properties.ConfigProperties; +import org.dromara.common.social.config.properties.SocialProperties; +import org.dromara.common.social.utils.AuthRedisStateCache; +import org.dromara.common.social.utils.SocialUtils; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.system.domain.bo.SysTenantBo; import org.dromara.system.domain.vo.SysTenantVo; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISocialUserService; import org.dromara.system.service.ISysConfigService; import org.dromara.system.service.ISysTenantService; import org.dromara.web.domain.vo.LoginTenantVo; @@ -26,8 +42,10 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.io.IOException; import java.net.URL; import java.util.List; +import java.util.Map; /** * 璁よ瘉 @@ -41,10 +59,14 @@ @RequestMapping("/auth") public class AuthController { + private final SocialProperties socialProperties; private final SysLoginService loginService; private final SysRegisterService registerService; private final ISysConfigService configService; private final ISysTenantService tenantService; + private final ISocialUserService socialUserService; + + /** * 鐧诲綍鏂规硶 @@ -115,6 +137,71 @@ return R.ok(loginVo); } + + /** + * 璁よ瘉鎺堟潈 + * @param source + */ + @GetMapping("/binding/{source}") + @ResponseBody + public R<LoginVo> authBinding(@PathVariable("source") String source, HttpServletRequest request){ + SysUserVo userLoding = new SysUserVo(); + if (ObjectUtil.isNull(userLoding)) { + return R.fail("鎺堟潈澶辫触锛岃鍏堢櫥褰曞啀缁戝畾"); + } + if (socialUserService.isExistByUserIdAndSource(userLoding.getUserId(),source)) + { + return R.fail(source + "骞冲彴璐﹀彿宸茬粡琚处鍙风粦瀹�"); + } + ConfigProperties obj = socialProperties.getType().get(source); + if (ObjectUtil.isNull(obj)){ + return R.fail(source + "骞冲彴璐﹀彿鏆備笉鏀寔"); + } + AuthRequest authRequest = SocialUtils.getAuthRequest(source, + obj.getClientId(), + obj.getClientSecret(), + obj.getRedirectUri()); + String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); + return R.ok(authorizeUrl); + } + + /** + * 绗笁鏂圭櫥褰曞洖璋冧笟鍔″鐞� + * @param source + * @param callback + * @param request + * @return + */ + @SuppressWarnings("unchecked") + @GetMapping("/social-login/{source}") + public R<String> socialLogin(@PathVariable("source") String source, AuthCallback callback, HttpServletRequest request) throws IOException { + ConfigProperties obj = socialProperties.getType().get(source); + if (ObjectUtil.isNull(obj)){ + return R.fail(source + "骞冲彴璐﹀彿鏆備笉鏀寔"); + } + AuthRequest authRequest = SocialUtils.getAuthRequest(source, + obj.getClientId(), + obj.getClientSecret(), + obj.getRedirectUri()); + AuthResponse<AuthUser> response = authRequest.login(callback); + return loginService.socialLogin(source, response, request); + } + + /** + * 鍙栨秷鎺堟潈 + * @param socialId + */ + @DeleteMapping(value = "/unlock/{socialId}") + public R<Void> unlockSocial(@PathVariable Long socialId) + { + Boolean rows = socialUserService.deleteWithValidById(socialId); + return rows ? R.ok() : R.fail("鍙栨秷鎺堟潈澶辫触"); + } + + + + + /** * 閫�鍑虹櫥褰� */ -- Gitblit v1.9.3