Commit a0a5d3a35741cdbbc39e9448b95d912cc87b4185

Authored by YunaiV
1 parent 7b3a2830

1. 优化前端的社交登陆的枚举

2. 将三方登陆,统一改成社交登陆
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/auth/SysAuthController.java
@@ -105,7 +105,7 @@ public class SysAuthController { @@ -105,7 +105,7 @@ public class SysAuthController {
105 @GetMapping("/social-login-redirect") 105 @GetMapping("/social-login-redirect")
106 @ApiOperation("社交登陆的跳转") 106 @ApiOperation("社交登陆的跳转")
107 @ApiImplicitParams({ 107 @ApiImplicitParams({
108 - @ApiImplicitParam(name = "type", value = "三方类型", required = true, dataTypeClass = Integer.class), 108 + @ApiImplicitParam(name = "type", value = "社交类型", required = true, dataTypeClass = Integer.class),
109 @ApiImplicitParam(name = "redirectUri", value = "回调路径", dataTypeClass = String.class) 109 @ApiImplicitParam(name = "redirectUri", value = "回调路径", dataTypeClass = String.class)
110 }) 110 })
111 public CommonResult<String> socialLoginRedirect(@RequestParam("type") Integer type, 111 public CommonResult<String> socialLoginRedirect(@RequestParam("type") Integer type,
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/redis/SysRedisKeyConstants.java
@@ -23,7 +23,7 @@ public interface SysRedisKeyConstants { @@ -23,7 +23,7 @@ public interface SysRedisKeyConstants {
23 "captcha_code:%s", // 参数为 uuid 23 "captcha_code:%s", // 参数为 uuid
24 STRING, String.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); 24 STRING, String.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC);
25 25
26 - RedisKeyDefine AUTH_SOCIAL_USER = new RedisKeyDefine("认证的三方用户", 26 + RedisKeyDefine AUTH_SOCIAL_USER = new RedisKeyDefine("认证的社交用户",
27 "auth_social_user:%d:%s", // 参数为 type,code 27 "auth_social_user:%d:%s", // 参数为 type,code
28 STRING, AuthUser.class, Duration.ofDays(1)); 28 STRING, AuthUser.class, Duration.ofDays(1));
29 29
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/enums/SysErrorCodeConstants.java
@@ -17,7 +17,7 @@ public interface SysErrorCodeConstants { @@ -17,7 +17,7 @@ public interface SysErrorCodeConstants {
17 ErrorCode AUTH_LOGIN_CAPTCHA_NOT_FOUND = new ErrorCode(1002000003, "验证码不存在"); 17 ErrorCode AUTH_LOGIN_CAPTCHA_NOT_FOUND = new ErrorCode(1002000003, "验证码不存在");
18 ErrorCode AUTH_LOGIN_CAPTCHA_CODE_ERROR = new ErrorCode(1002000004, "验证码不正确"); 18 ErrorCode AUTH_LOGIN_CAPTCHA_CODE_ERROR = new ErrorCode(1002000004, "验证码不正确");
19 ErrorCode AUTH_THIRD_LOGIN_NOT_BIND = new ErrorCode(1002000005, "未绑定账号,需要进行绑定"); 19 ErrorCode AUTH_THIRD_LOGIN_NOT_BIND = new ErrorCode(1002000005, "未绑定账号,需要进行绑定");
20 - ErrorCode AUTH_THIRD_OAUTH_FAILURE = new ErrorCode(1002000006, "三方授权失败,原因是:{}"); 20 + ErrorCode AUTH_THIRD_OAUTH_FAILURE = new ErrorCode(1002000006, "社交授权失败,原因是:{}");
21 21
22 // ========== TOKEN 模块 1002001000 ========== 22 // ========== TOKEN 模块 1002001000 ==========
23 ErrorCode TOKEN_EXPIRED = new ErrorCode(1002001000, "Token 已经过期"); 23 ErrorCode TOKEN_EXPIRED = new ErrorCode(1002001000, "Token 已经过期");
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
@@ -258,7 +258,7 @@ public class SysAuthServiceImpl implements SysAuthService { @@ -258,7 +258,7 @@ public class SysAuthServiceImpl implements SysAuthService {
258 private AuthUser obtainAuthUser(Integer type, AuthCallback authCallback) { 258 private AuthUser obtainAuthUser(Integer type, AuthCallback authCallback) {
259 AuthRequest authRequest = authRequestFactory.get(SysSocialTypeEnum.valueOfType(type).getSource()); 259 AuthRequest authRequest = authRequestFactory.get(SysSocialTypeEnum.valueOfType(type).getSource());
260 AuthResponse<?> authResponse = authRequest.login(authCallback); 260 AuthResponse<?> authResponse = authRequest.login(authCallback);
261 - log.info("[obtainAuthUser][请求三方平台 type({}) request({}) response({})]", type, JsonUtils.toJsonString(authCallback), 261 + log.info("[obtainAuthUser][请求社交平台 type({}) request({}) response({})]", type, JsonUtils.toJsonString(authCallback),
262 JsonUtils.toJsonString(authResponse)); 262 JsonUtils.toJsonString(authResponse));
263 if (!authResponse.ok()) { 263 if (!authResponse.ok()) {
264 throw exception(AUTH_THIRD_OAUTH_FAILURE, authResponse.getMsg()); 264 throw exception(AUTH_THIRD_OAUTH_FAILURE, authResponse.getMsg());
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserService.java
@@ -35,14 +35,6 @@ public interface SysUserService { @@ -35,14 +35,6 @@ public interface SysUserService {
35 Long createUser(SysUserCreateReqVO reqVO); 35 Long createUser(SysUserCreateReqVO reqVO);
36 36
37 /** 37 /**
38 - * 绑定第三方用户  
39 - * @param sysUserId 系统用户ID  
40 - * @param socialUSerId 第三方唯一标识  
41 - * @return  
42 - */  
43 - Long bindSocialUSer(Long sysUserId, String socialUSerId);  
44 -  
45 - /**  
46 * 修改用户 38 * 修改用户
47 * 39 *
48 * @param reqVO 用户信息 40 * @param reqVO 用户信息
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/user/SysUserServiceImpl.java
@@ -4,11 +4,6 @@ import cn.hutool.core.collection.CollUtil; @@ -4,11 +4,6 @@ import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.io.IoUtil; 4 import cn.hutool.core.io.IoUtil;
5 import cn.hutool.core.util.IdUtil; 5 import cn.hutool.core.util.IdUtil;
6 import cn.hutool.core.util.StrUtil; 6 import cn.hutool.core.util.StrUtil;
7 -import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysSocialUserDO;  
8 -import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.social.SysUserSocialMapper;  
9 -import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;  
10 -import cn.iocoder.yudao.framework.common.exception.ServiceException;  
11 -import cn.iocoder.yudao.framework.common.pojo.PageResult;  
12 import cn.iocoder.yudao.adminserver.modules.infra.service.file.InfFileService; 7 import cn.iocoder.yudao.adminserver.modules.infra.service.file.InfFileService;
13 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; 8 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO;
14 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; 9 import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO;
@@ -17,10 +12,14 @@ import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert; @@ -17,10 +12,14 @@ import cn.iocoder.yudao.adminserver.modules.system.convert.user.SysUserConvert;
17 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO; 12 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysDeptDO;
18 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO; 13 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.dept.SysPostDO;
19 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO; 14 import cn.iocoder.yudao.adminserver.modules.system.dal.dataobject.user.SysUserDO;
  15 +import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.social.SysUserSocialMapper;
20 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.user.SysUserMapper; 16 import cn.iocoder.yudao.adminserver.modules.system.dal.mysql.user.SysUserMapper;
21 import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; 17 import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService;
22 import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; 18 import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService;
23 import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; 19 import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
  20 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
  21 +import cn.iocoder.yudao.framework.common.exception.ServiceException;
  22 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
24 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; 23 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
25 import com.google.common.annotations.VisibleForTesting; 24 import com.google.common.annotations.VisibleForTesting;
26 import lombok.extern.slf4j.Slf4j; 25 import lombok.extern.slf4j.Slf4j;
@@ -33,9 +32,8 @@ import javax.annotation.Resource; @@ -33,9 +32,8 @@ import javax.annotation.Resource;
33 import java.io.InputStream; 32 import java.io.InputStream;
34 import java.util.*; 33 import java.util.*;
35 34
36 -import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;  
37 import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*; 35 import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.*;
38 - 36 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
39 37
40 /** 38 /**
41 * 用户 Service 实现类 39 * 用户 Service 实现类
@@ -79,15 +77,6 @@ public class SysUserServiceImpl implements SysUserService { @@ -79,15 +77,6 @@ public class SysUserServiceImpl implements SysUserService {
79 } 77 }
80 78
81 @Override 79 @Override
82 - public Long bindSocialUSer(Long sysUserId, String socialUSerId) {  
83 - SysSocialUserDO userSocialDO = new SysSocialUserDO();  
84 - userSocialDO.setUserId(sysUserId);  
85 -// userSocialDO.setSocialUserId(socialUSerId);  
86 - userSocialMapper.insert(userSocialDO);  
87 - return userSocialDO.getUserId();  
88 - }  
89 -  
90 - @Override  
91 public void updateUser(SysUserUpdateReqVO reqVO) { 80 public void updateUser(SysUserUpdateReqVO reqVO) {
92 // 校验正确性 81 // 校验正确性
93 this.checkCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(), 82 this.checkCreateOrUpdate(reqVO.getId(), reqVO.getUsername(), reqVO.getMobile(), reqVO.getEmail(),
yudao-admin-ui/src/utils/constants.js
@@ -68,9 +68,25 @@ export const InfApiErrorLogProcessStatusEnum = { @@ -68,9 +68,25 @@ export const InfApiErrorLogProcessStatusEnum = {
68 } 68 }
69 69
70 /** 70 /**
71 - * 用户的三方平台的类型枚举 71 + * 用户的社交平台的类型枚举
72 */ 72 */
73 export const SysUserSocialTypeEnum = { 73 export const SysUserSocialTypeEnum = {
74 - GITEE: 10,  
75 - DINGTALK: 20, 74 + // GITEE: {
  75 + // title: "码云",
  76 + // type: 10,
  77 + // source: "gitee",
  78 + // img: "https://cdn.jsdelivr.net/gh/justauth/justauth-oauth-logo@1.11/gitee.png",
  79 + // },
  80 + DINGTALK: {
  81 + title: "钉钉",
  82 + type: 20,
  83 + source: "dingtalk",
  84 + img: "https://cdn.jsdelivr.net/gh/justauth/justauth-oauth-logo@1.11/dingtalk.png",
  85 + },
  86 + WECHAT_ENTERPRISE: {
  87 + title: "企业微信",
  88 + type: 30,
  89 + source: "wechat_enterprise",
  90 + img: "https://cdn.jsdelivr.net/gh/justauth/justauth-oauth-logo@1.11/wechat_enterprise.png",
  91 + }
76 } 92 }
yudao-admin-ui/src/views/login.vue
@@ -30,8 +30,8 @@ @@ -30,8 +30,8 @@
30 30
31 <el-form-item style="width:100%;"> 31 <el-form-item style="width:100%;">
32 <div class="oauth-login" style="display:flex"> 32 <div class="oauth-login" style="display:flex">
33 - <div class="oauth-login-item" v-for="item in oauthProviders" :key="item.code" @click="doAuth2Login(item)">  
34 - <img :src=item.img height="25px" width="25px" alt="登录" > 33 + <div class="oauth-login-item" v-for="item in SysUserSocialTypeEnum" :key="item.type" @click="doSocialLogin(item)">
  34 + <img :src="item.img" height="25px" width="25px" alt="登录" >
35 <span>{{item.title}}</span> 35 <span>{{item.title}}</span>
36 </div> 36 </div>
37 </div> 37 </div>
@@ -48,6 +48,7 @@ @@ -48,6 +48,7 @@
48 import { getCodeImg,socialLoginRedirect } from "@/api/login"; 48 import { getCodeImg,socialLoginRedirect } from "@/api/login";
49 import Cookies from "js-cookie"; 49 import Cookies from "js-cookie";
50 import { encrypt, decrypt } from '@/utils/jsencrypt' 50 import { encrypt, decrypt } from '@/utils/jsencrypt'
  51 +import {InfApiErrorLogProcessStatusEnum, SysUserSocialTypeEnum} from "@/utils/constants";
51 52
52 export default { 53 export default {
53 name: "Login", 54 name: "Login",
@@ -61,23 +62,6 @@ export default { @@ -61,23 +62,6 @@ export default {
61 code: "", 62 code: "",
62 uuid: "" 63 uuid: ""
63 }, 64 },
64 - oauthProviders: [{  
65 - img: "https://cdn.jsdelivr.net/gh/justauth/justauth-oauth-logo@1.2/gitee.png",  
66 - title: "码云",  
67 - source: "gitee",  
68 - type: 10  
69 - }, {  
70 - img: "https://cdn.jsdelivr.net/gh/justauth/justauth-oauth-logo@1.2/dingtalk.png",  
71 - title: "钉钉",  
72 - source: "dingtalk",  
73 - type: 20  
74 - } , {  
75 - img: "https://cdn.jsdelivr.net/gh/justauth/justauth-oauth-logo@1.2/wechat_enterprise.png",  
76 - title: "企业微信",  
77 - source: "wechat_enterprise",  
78 - type: 30  
79 - }  
80 - ],  
81 loginRules: { 65 loginRules: {
82 username: [ 66 username: [
83 { required: true, trigger: "blur", message: "用户名不能为空" } 67 { required: true, trigger: "blur", message: "用户名不能为空" }
@@ -88,18 +72,22 @@ export default { @@ -88,18 +72,22 @@ export default {
88 code: [{ required: true, trigger: "change", message: "验证码不能为空" }] 72 code: [{ required: true, trigger: "change", message: "验证码不能为空" }]
89 }, 73 },
90 loading: false, 74 loading: false,
91 - redirect: undefined 75 + redirect: undefined,
  76 + // 枚举
  77 + SysUserSocialTypeEnum: SysUserSocialTypeEnum,
92 }; 78 };
93 }, 79 },
94 - watch: {  
95 - $route: {  
96 - handler: function(route) {  
97 - this.redirect = route.query && route.query.redirect;  
98 - },  
99 - immediate: true  
100 - }  
101 - }, 80 + // watch: {
  81 + // $route: {
  82 + // handler: function(route) {
  83 + // this.redirect = route.query && route.query.redirect;
  84 + // },
  85 + // immediate: true
  86 + // }
  87 + // },
102 created() { 88 created() {
  89 + // 重定向地址
  90 + this.redirect = this.$route.query.redirect;
103 this.getCode(); 91 this.getCode();
104 this.getCookie(); 92 this.getCookie();
105 }, 93 },
@@ -143,16 +131,16 @@ export default { @@ -143,16 +131,16 @@ export default {
143 } 131 }
144 }); 132 });
145 }, 133 },
146 - doAuth2Login(provider) {  
147 - // console.log("开始Oauth登录...%o", provider.code); 134 + doSocialLogin(socialTypeEnum) {
  135 + // console.log("开始Oauth登录...%o", socialTypeEnum.code);
148 // 设置登陆中 136 // 设置登陆中
149 this.loading = true; 137 this.loading = true;
150 // 计算 redirectUri 138 // 计算 redirectUri
151 - // const redirectUri = location.origin + '/social-login';  
152 - const redirectUri = 'http://127.0.0.1:48080/api/gitee/callback'; 139 + const redirectUri = location.origin + '/social-login?type=' + socialTypeEnum.type + '&redirect=' + (this.redirect || "/"); // 重定向不能丢
  140 + // const redirectUri = 'http://127.0.0.1:48080/api/gitee/callback';
153 // const redirectUri = 'http://127.0.0.1:48080/api/dingtalk/callback'; 141 // const redirectUri = 'http://127.0.0.1:48080/api/dingtalk/callback';
154 // 进行跳转 142 // 进行跳转
155 - socialLoginRedirect(provider.type, redirectUri).then((res) => { 143 + socialLoginRedirect(socialTypeEnum.type, encodeURIComponent(redirectUri)).then((res) => {
156 // console.log(res.url); 144 // console.log(res.url);
157 window.location.href = res.data; 145 window.location.href = res.data;
158 }); 146 });
yudao-admin-ui/src/views/socialLogin.vue
@@ -51,24 +51,27 @@ export default { @@ -51,24 +51,27 @@ export default {
51 }, 51 },
52 loading: false, 52 loading: false,
53 redirect: undefined, 53 redirect: undefined,
54 - // 三方登陆相关 54 + // 社交登陆相关
55 type: undefined, 55 type: undefined,
56 code: undefined, 56 code: undefined,
57 state: undefined, 57 state: undefined,
58 }; 58 };
59 }, 59 },
60 - watch: {  
61 - $route: {  
62 - handler: function(route) {  
63 - this.redirect = route.query && route.query.redirect;  
64 - },  
65 - immediate: true  
66 - }  
67 - }, 60 + // watch: {
  61 + // $route: {
  62 + // handler: function(route) {
  63 + // this.redirect = route.query && route.query.redirect;
  64 + // },
  65 + // immediate: true
  66 + // }
  67 + // },
68 created() { 68 created() {
69 this.getCookie(); 69 this.getCookie();
70 - // 三方登陆相关  
71 - this.type = 10; // TODO 芋艿:需要改 70 + // 重定向地址
  71 + this.redirect = this.$route.query.redirect;
  72 + debugger
  73 + // 社交登陆相关
  74 + this.type = this.$route.query.type;
72 this.code = this.$route.query.code; 75 this.code = this.$route.query.code;
73 this.state = this.$route.query.state; 76 this.state = this.$route.query.state;
74 this.$store.dispatch("SocialLogin", { 77 this.$store.dispatch("SocialLogin", {