Commit ed56c71ba18f995c934afc74b06c44e6d0a2fe35
Merge remote-tracking branch 'origin/feature/1.8.0-uniapp' into feature/1.8.0-uniapp
Showing
11 changed files
with
75 additions
and
137 deletions
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java
| @@ -141,23 +141,16 @@ public class AuthController { | @@ -141,23 +141,16 @@ public class AuthController { | ||
| 141 | @ApiImplicitParam(name = "type", value = "社交类型", required = true, dataTypeClass = Integer.class), | 141 | @ApiImplicitParam(name = "type", value = "社交类型", required = true, dataTypeClass = Integer.class), |
| 142 | @ApiImplicitParam(name = "redirectUri", value = "回调路径", dataTypeClass = String.class) | 142 | @ApiImplicitParam(name = "redirectUri", value = "回调路径", dataTypeClass = String.class) |
| 143 | }) | 143 | }) |
| 144 | - public CommonResult<String> socialAuthRedirect(@RequestParam("type") Integer type, | 144 | + public CommonResult<String> socialLogin(@RequestParam("type") Integer type, |
| 145 | @RequestParam("redirectUri") String redirectUri) { | 145 | @RequestParam("redirectUri") String redirectUri) { |
| 146 | return CommonResult.success(socialUserService.getAuthorizeUrl(type, redirectUri)); | 146 | return CommonResult.success(socialUserService.getAuthorizeUrl(type, redirectUri)); |
| 147 | } | 147 | } |
| 148 | 148 | ||
| 149 | - @PostMapping("/social-quick-login") | ||
| 150 | - @ApiOperation("社交快捷登录,使用 code 授权码") | 149 | + @PostMapping("/social-login") |
| 150 | + @ApiOperation(value = "社交快捷登录,使用 code 授权码", notes = "适合未登录的用户,但是社交账号已绑定用户") | ||
| 151 | @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 | 151 | @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 |
| 152 | - public CommonResult<AuthLoginRespVO> socialQuickLogin(@RequestBody @Valid AuthSocialQuickLoginReqVO reqVO) { | ||
| 153 | - return success(authService.socialQuickLogin(reqVO)); | ||
| 154 | - } | ||
| 155 | - | ||
| 156 | - @PostMapping("/social-bind-login") | ||
| 157 | - @ApiOperation("社交绑定登录,使用 code 授权码 + 账号密码") | ||
| 158 | - @OperateLog(enable = false) // 避免 Post 请求被记录操作日志 | ||
| 159 | - public CommonResult<AuthLoginRespVO> socialBindLogin(@RequestBody @Valid AuthSocialBindLoginReqVO reqVO) { | ||
| 160 | - return success(authService.socialBindLogin(reqVO)); | 152 | + public CommonResult<AuthLoginRespVO> socialQuickLogin(@RequestBody @Valid AuthSocialLoginReqVO reqVO) { |
| 153 | + return success(authService.socialLogin(reqVO)); | ||
| 161 | } | 154 | } |
| 162 | 155 | ||
| 163 | } | 156 | } |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthLoginReqVO.java
| 1 | package cn.iocoder.yudao.module.system.controller.admin.auth.vo; | 1 | package cn.iocoder.yudao.module.system.controller.admin.auth.vo; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.util.StrUtil; | ||
| 4 | +import cn.iocoder.yudao.framework.common.validation.InEnum; | ||
| 5 | +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; | ||
| 3 | import io.swagger.annotations.ApiModel; | 6 | import io.swagger.annotations.ApiModel; |
| 4 | import io.swagger.annotations.ApiModelProperty; | 7 | import io.swagger.annotations.ApiModelProperty; |
| 5 | import lombok.AllArgsConstructor; | 8 | import lombok.AllArgsConstructor; |
| @@ -8,10 +11,11 @@ import lombok.Data; | @@ -8,10 +11,11 @@ import lombok.Data; | ||
| 8 | import lombok.NoArgsConstructor; | 11 | import lombok.NoArgsConstructor; |
| 9 | import org.hibernate.validator.constraints.Length; | 12 | import org.hibernate.validator.constraints.Length; |
| 10 | 13 | ||
| 14 | +import javax.validation.constraints.AssertTrue; | ||
| 11 | import javax.validation.constraints.NotEmpty; | 15 | import javax.validation.constraints.NotEmpty; |
| 12 | import javax.validation.constraints.Pattern; | 16 | import javax.validation.constraints.Pattern; |
| 13 | 17 | ||
| 14 | -@ApiModel("管理后台 - 账号密码登录 Request VO") | 18 | +@ApiModel(value = "管理后台 - 账号密码登录 Request VO", description = "如果登录并绑定社交用户,需要传递 social 开头的参数") |
| 15 | @Data | 19 | @Data |
| 16 | @NoArgsConstructor | 20 | @NoArgsConstructor |
| 17 | @AllArgsConstructor | 21 | @AllArgsConstructor |
| @@ -29,6 +33,8 @@ public class AuthLoginReqVO { | @@ -29,6 +33,8 @@ public class AuthLoginReqVO { | ||
| 29 | @Length(min = 4, max = 16, message = "密码长度为 4-16 位") | 33 | @Length(min = 4, max = 16, message = "密码长度为 4-16 位") |
| 30 | private String password; | 34 | private String password; |
| 31 | 35 | ||
| 36 | + // ========== 图片验证码相关 ========== | ||
| 37 | + | ||
| 32 | @ApiModelProperty(value = "验证码", required = true, example = "1024", notes = "验证码开启时,需要传递") | 38 | @ApiModelProperty(value = "验证码", required = true, example = "1024", notes = "验证码开启时,需要传递") |
| 33 | @NotEmpty(message = "验证码不能为空", groups = CodeEnableGroup.class) | 39 | @NotEmpty(message = "验证码不能为空", groups = CodeEnableGroup.class) |
| 34 | private String code; | 40 | private String code; |
| @@ -37,9 +43,31 @@ public class AuthLoginReqVO { | @@ -37,9 +43,31 @@ public class AuthLoginReqVO { | ||
| 37 | @NotEmpty(message = "唯一标识不能为空", groups = CodeEnableGroup.class) | 43 | @NotEmpty(message = "唯一标识不能为空", groups = CodeEnableGroup.class) |
| 38 | private String uuid; | 44 | private String uuid; |
| 39 | 45 | ||
| 46 | + // ========== 绑定社交登录时,需要传递如下参数 ========== | ||
| 47 | + | ||
| 48 | + @ApiModelProperty(value = "社交平台的类型", required = true, example = "10", notes = "参见 SysUserSocialTypeEnum 枚举值") | ||
| 49 | + @InEnum(SocialTypeEnum.class) | ||
| 50 | + private Integer socialType; | ||
| 51 | + | ||
| 52 | + @ApiModelProperty(value = "授权码", required = true, example = "1024") | ||
| 53 | + private String socialCode; | ||
| 54 | + | ||
| 55 | + @ApiModelProperty(value = "state", required = true, example = "9b2ffbc1-7425-4155-9894-9d5c08541d62") | ||
| 56 | + private String socialState; | ||
| 57 | + | ||
| 40 | /** | 58 | /** |
| 41 | * 开启验证码的 Group | 59 | * 开启验证码的 Group |
| 42 | */ | 60 | */ |
| 43 | public interface CodeEnableGroup {} | 61 | public interface CodeEnableGroup {} |
| 44 | 62 | ||
| 63 | + @AssertTrue(message = "授权码不能为空") | ||
| 64 | + public boolean isSocialCodeValid() { | ||
| 65 | + return socialType == null || StrUtil.isNotEmpty(socialCode); | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + @AssertTrue(message = "授权 state 不能为空") | ||
| 69 | + public boolean isSocialState() { | ||
| 70 | + return socialType == null || StrUtil.isNotEmpty(socialState); | ||
| 71 | + } | ||
| 72 | + | ||
| 45 | } | 73 | } |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSocialBindLoginReqVO.java deleted
| 1 | -package cn.iocoder.yudao.module.system.controller.admin.auth.vo; | ||
| 2 | - | ||
| 3 | -import cn.iocoder.yudao.framework.common.validation.InEnum; | ||
| 4 | -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; | ||
| 5 | -import io.swagger.annotations.ApiModel; | ||
| 6 | -import io.swagger.annotations.ApiModelProperty; | ||
| 7 | -import lombok.AllArgsConstructor; | ||
| 8 | -import lombok.Builder; | ||
| 9 | -import lombok.Data; | ||
| 10 | -import lombok.NoArgsConstructor; | ||
| 11 | -import org.hibernate.validator.constraints.Length; | ||
| 12 | - | ||
| 13 | -import javax.validation.constraints.NotEmpty; | ||
| 14 | -import javax.validation.constraints.NotNull; | ||
| 15 | -import javax.validation.constraints.Pattern; | ||
| 16 | - | ||
| 17 | -@ApiModel("管理后台 - 社交绑定登录 Request VO,使用 code 授权码 + 账号密码") | ||
| 18 | -@Data | ||
| 19 | -@NoArgsConstructor | ||
| 20 | -@AllArgsConstructor | ||
| 21 | -@Builder | ||
| 22 | -public class AuthSocialBindLoginReqVO { | ||
| 23 | - | ||
| 24 | - @ApiModelProperty(value = "社交平台的类型", required = true, example = "10", notes = "参见 UserSocialTypeEnum 枚举值") | ||
| 25 | - @InEnum(SocialTypeEnum.class) | ||
| 26 | - @NotNull(message = "社交平台的类型不能为空") | ||
| 27 | - private Integer type; | ||
| 28 | - | ||
| 29 | - @ApiModelProperty(value = "授权码", required = true, example = "1024") | ||
| 30 | - @NotEmpty(message = "授权码不能为空") | ||
| 31 | - private String code; | ||
| 32 | - | ||
| 33 | - @ApiModelProperty(value = "state", required = true, example = "9b2ffbc1-7425-4155-9894-9d5c08541d62") | ||
| 34 | - @NotEmpty(message = "state 不能为空") | ||
| 35 | - private String state; | ||
| 36 | - | ||
| 37 | - @ApiModelProperty(value = "账号", required = true, example = "yudaoyuanma") | ||
| 38 | - @NotEmpty(message = "登录账号不能为空") | ||
| 39 | - @Length(min = 4, max = 16, message = "账号长度为 4-16 位") | ||
| 40 | - @Pattern(regexp = "^[A-Za-z0-9]+$", message = "账号格式为数字以及字母") | ||
| 41 | - private String username; | ||
| 42 | - | ||
| 43 | - @ApiModelProperty(value = "密码", required = true, example = "buzhidao") | ||
| 44 | - @NotEmpty(message = "密码不能为空") | ||
| 45 | - @Length(min = 4, max = 16, message = "密码长度为 4-16 位") | ||
| 46 | - private String password; | ||
| 47 | - | ||
| 48 | -} |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSocialQuickLoginReqVO.java renamed to yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSocialLoginReqVO.java
| 1 | package cn.iocoder.yudao.module.system.controller.admin.auth.vo; | 1 | package cn.iocoder.yudao.module.system.controller.admin.auth.vo; |
| 2 | 2 | ||
| 3 | -import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; | ||
| 4 | import cn.iocoder.yudao.framework.common.validation.InEnum; | 3 | import cn.iocoder.yudao.framework.common.validation.InEnum; |
| 4 | +import cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum; | ||
| 5 | import io.swagger.annotations.ApiModel; | 5 | import io.swagger.annotations.ApiModel; |
| 6 | import io.swagger.annotations.ApiModelProperty; | 6 | import io.swagger.annotations.ApiModelProperty; |
| 7 | import lombok.AllArgsConstructor; | 7 | import lombok.AllArgsConstructor; |
| @@ -12,12 +12,12 @@ import lombok.NoArgsConstructor; | @@ -12,12 +12,12 @@ import lombok.NoArgsConstructor; | ||
| 12 | import javax.validation.constraints.NotEmpty; | 12 | import javax.validation.constraints.NotEmpty; |
| 13 | import javax.validation.constraints.NotNull; | 13 | import javax.validation.constraints.NotNull; |
| 14 | 14 | ||
| 15 | -@ApiModel("管理后台 - 社交快捷登录 Request VO,使用 code 授权码") | 15 | +@ApiModel("管理后台 - 社交绑定登录 Request VO,使用 code 授权码 + 账号密码") |
| 16 | @Data | 16 | @Data |
| 17 | @NoArgsConstructor | 17 | @NoArgsConstructor |
| 18 | @AllArgsConstructor | 18 | @AllArgsConstructor |
| 19 | @Builder | 19 | @Builder |
| 20 | -public class AuthSocialQuickLoginReqVO { | 20 | +public class AuthSocialLoginReqVO { |
| 21 | 21 | ||
| 22 | @ApiModelProperty(value = "社交平台的类型", required = true, example = "10", notes = "参见 UserSocialTypeEnum 枚举值") | 22 | @ApiModelProperty(value = "社交平台的类型", required = true, example = "10", notes = "参见 UserSocialTypeEnum 枚举值") |
| 23 | @InEnum(SocialTypeEnum.class) | 23 | @InEnum(SocialTypeEnum.class) |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java
| @@ -65,8 +65,7 @@ public interface AuthConvert { | @@ -65,8 +65,7 @@ public interface AuthConvert { | ||
| 65 | return CollectionUtils.filterList(treeNodeMap.values(), node -> MenuIdEnum.ROOT.getId().equals(node.getParentId())); | 65 | return CollectionUtils.filterList(treeNodeMap.values(), node -> MenuIdEnum.ROOT.getId().equals(node.getParentId())); |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | - SocialUserBindReqDTO convert(Long userId, Integer userType, AuthSocialBindLoginReqVO reqVO); | ||
| 69 | - SocialUserBindReqDTO convert(Long userId, Integer userType, AuthSocialQuickLoginReqVO reqVO); | 68 | + SocialUserBindReqDTO convert(Long userId, Integer userType, AuthSocialLoginReqVO reqVO); |
| 70 | 69 | ||
| 71 | SmsCodeSendReqDTO convert(AuthSmsSendReqVO reqVO); | 70 | SmsCodeSendReqDTO convert(AuthSmsSendReqVO reqVO); |
| 72 | 71 |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/security/config/SecurityConfiguration.java
| @@ -24,8 +24,7 @@ public class SecurityConfiguration { | @@ -24,8 +24,7 @@ public class SecurityConfiguration { | ||
| 24 | registry.antMatchers(buildAdminApi("/system/auth/refresh-token")).permitAll(); | 24 | registry.antMatchers(buildAdminApi("/system/auth/refresh-token")).permitAll(); |
| 25 | // 社交登陆的接口 | 25 | // 社交登陆的接口 |
| 26 | registry.antMatchers(buildAdminApi("/system/auth/social-auth-redirect")).permitAll(); | 26 | registry.antMatchers(buildAdminApi("/system/auth/social-auth-redirect")).permitAll(); |
| 27 | - registry.antMatchers(buildAdminApi("/system/auth/social-quick-login")).permitAll(); | ||
| 28 | - registry.antMatchers(buildAdminApi("/system/auth/social-bind-login")).permitAll(); | 27 | + registry.antMatchers(buildAdminApi("/system/auth/social-login")).permitAll(); |
| 29 | // 登录登录的接口 | 28 | // 登录登录的接口 |
| 30 | registry.antMatchers(buildAdminApi("/system/auth/sms-login")).permitAll(); | 29 | registry.antMatchers(buildAdminApi("/system/auth/sms-login")).permitAll(); |
| 31 | registry.antMatchers(buildAdminApi("/system/auth/send-sms-code")).permitAll(); | 30 | registry.antMatchers(buildAdminApi("/system/auth/send-sms-code")).permitAll(); |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java
| @@ -60,15 +60,7 @@ public interface AdminAuthService { | @@ -60,15 +60,7 @@ public interface AdminAuthService { | ||
| 60 | * @param reqVO 登录信息 | 60 | * @param reqVO 登录信息 |
| 61 | * @return 登录结果 | 61 | * @return 登录结果 |
| 62 | */ | 62 | */ |
| 63 | - AuthLoginRespVO socialQuickLogin(@Valid AuthSocialQuickLoginReqVO reqVO); | ||
| 64 | - | ||
| 65 | - /** | ||
| 66 | - * 社交绑定登录,使用 code 授权码 + 账号密码 | ||
| 67 | - * | ||
| 68 | - * @param reqVO 登录信息 | ||
| 69 | - * @return 登录结果 | ||
| 70 | - */ | ||
| 71 | - AuthLoginRespVO socialBindLogin(@Valid AuthSocialBindLoginReqVO reqVO); | 63 | + AuthLoginRespVO socialLogin(@Valid AuthSocialLoginReqVO reqVO); |
| 72 | 64 | ||
| 73 | /** | 65 | /** |
| 74 | * 刷新访问令牌 | 66 | * 刷新访问令牌 |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java
| @@ -8,13 +8,14 @@ import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; | @@ -8,13 +8,14 @@ import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; | ||
| 8 | import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; | 8 | import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; |
| 9 | import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; | 9 | import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; |
| 10 | import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; | 10 | import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; |
| 11 | +import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; | ||
| 11 | import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*; | 12 | import cn.iocoder.yudao.module.system.controller.admin.auth.vo.*; |
| 12 | import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; | 13 | import cn.iocoder.yudao.module.system.convert.auth.AuthConvert; |
| 13 | import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; | 14 | import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; |
| 14 | import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; | 15 | import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; |
| 15 | -import cn.iocoder.yudao.module.system.enums.oauth2.OAuth2ClientConstants; | ||
| 16 | import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; | 16 | import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum; |
| 17 | import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; | 17 | import cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum; |
| 18 | +import cn.iocoder.yudao.module.system.enums.oauth2.OAuth2ClientConstants; | ||
| 18 | import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; | 19 | import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; |
| 19 | import cn.iocoder.yudao.module.system.service.common.CaptchaService; | 20 | import cn.iocoder.yudao.module.system.service.common.CaptchaService; |
| 20 | import cn.iocoder.yudao.module.system.service.logger.LoginLogService; | 21 | import cn.iocoder.yudao.module.system.service.logger.LoginLogService; |
| @@ -91,6 +92,12 @@ public class AdminAuthServiceImpl implements AdminAuthService { | @@ -91,6 +92,12 @@ public class AdminAuthServiceImpl implements AdminAuthService { | ||
| 91 | // 使用账号密码,进行登录 | 92 | // 使用账号密码,进行登录 |
| 92 | AdminUserDO user = authenticate(reqVO.getUsername(), reqVO.getPassword()); | 93 | AdminUserDO user = authenticate(reqVO.getUsername(), reqVO.getPassword()); |
| 93 | 94 | ||
| 95 | + // 如果 socialType 非空,说明需要绑定社交用户 | ||
| 96 | + if (reqVO.getSocialType() != null) { | ||
| 97 | + socialUserService.bindSocialUser(new SocialUserBindReqDTO(user.getId(), getUserType().getValue(), | ||
| 98 | + reqVO.getSocialType(), reqVO.getSocialCode(), reqVO.getSocialState())); | ||
| 99 | + } | ||
| 100 | + | ||
| 94 | // 创建 Token 令牌,记录登录日志 | 101 | // 创建 Token 令牌,记录登录日志 |
| 95 | return createTokenAfterLoginSuccess(user.getId(), reqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME); | 102 | return createTokenAfterLoginSuccess(user.getId(), reqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME); |
| 96 | } | 103 | } |
| @@ -166,7 +173,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { | @@ -166,7 +173,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { | ||
| 166 | } | 173 | } |
| 167 | 174 | ||
| 168 | @Override | 175 | @Override |
| 169 | - public AuthLoginRespVO socialQuickLogin(AuthSocialQuickLoginReqVO reqVO) { | 176 | + public AuthLoginRespVO socialLogin(AuthSocialLoginReqVO reqVO) { |
| 170 | // 使用 code 授权码,进行登录。然后,获得到绑定的用户编号 | 177 | // 使用 code 授权码,进行登录。然后,获得到绑定的用户编号 |
| 171 | Long userId = socialUserService.getBindUserId(UserTypeEnum.ADMIN.getValue(), reqVO.getType(), | 178 | Long userId = socialUserService.getBindUserId(UserTypeEnum.ADMIN.getValue(), reqVO.getType(), |
| 172 | reqVO.getCode(), reqVO.getState()); | 179 | reqVO.getCode(), reqVO.getState()); |
| @@ -185,18 +192,6 @@ public class AdminAuthServiceImpl implements AdminAuthService { | @@ -185,18 +192,6 @@ public class AdminAuthServiceImpl implements AdminAuthService { | ||
| 185 | } | 192 | } |
| 186 | 193 | ||
| 187 | @Override | 194 | @Override |
| 188 | - public AuthLoginRespVO socialBindLogin(AuthSocialBindLoginReqVO reqVO) { | ||
| 189 | - // 使用账号密码,进行登录。 | ||
| 190 | - AdminUserDO user = authenticate(reqVO.getUsername(), reqVO.getPassword()); | ||
| 191 | - | ||
| 192 | - // 绑定社交用户 | ||
| 193 | - socialUserService.bindSocialUser(AuthConvert.INSTANCE.convert(user.getId(), getUserType().getValue(), reqVO)); | ||
| 194 | - | ||
| 195 | - // 创建 Token 令牌,记录登录日志 | ||
| 196 | - return createTokenAfterLoginSuccess(user.getId(), reqVO.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL); | ||
| 197 | - } | ||
| 198 | - | ||
| 199 | - @Override | ||
| 200 | public AuthLoginRespVO refreshToken(String refreshToken) { | 195 | public AuthLoginRespVO refreshToken(String refreshToken) { |
| 201 | OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.refreshAccessToken(refreshToken, OAuth2ClientConstants.CLIENT_ID_DEFAULT); | 196 | OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.refreshAccessToken(refreshToken, OAuth2ClientConstants.CLIENT_ID_DEFAULT); |
| 202 | return AuthConvert.INSTANCE.convert(accessTokenDO); | 197 | return AuthConvert.INSTANCE.convert(accessTokenDO); |
yudao-ui-admin/src/api/login.js
| @@ -3,12 +3,15 @@ import {getRefreshToken} from "@/utils/auth"; | @@ -3,12 +3,15 @@ import {getRefreshToken} from "@/utils/auth"; | ||
| 3 | import service from "@/utils/request"; | 3 | import service from "@/utils/request"; |
| 4 | 4 | ||
| 5 | // 登录方法 | 5 | // 登录方法 |
| 6 | -export function login(username, password, code, uuid) { | 6 | +export function login(username, password, code, uuid, |
| 7 | + socialType, socialCode, socialState) { | ||
| 7 | const data = { | 8 | const data = { |
| 8 | username, | 9 | username, |
| 9 | password, | 10 | password, |
| 10 | code, | 11 | code, |
| 11 | - uuid | 12 | + uuid, |
| 13 | + // 社交相关 | ||
| 14 | + socialType, socialCode, socialState | ||
| 12 | } | 15 | } |
| 13 | return request({ | 16 | return request({ |
| 14 | url: '/system/auth/login', | 17 | url: '/system/auth/login', |
| @@ -51,9 +54,9 @@ export function socialAuthRedirect(type, redirectUri) { | @@ -51,9 +54,9 @@ export function socialAuthRedirect(type, redirectUri) { | ||
| 51 | } | 54 | } |
| 52 | 55 | ||
| 53 | // 社交快捷登录,使用 code 授权码 | 56 | // 社交快捷登录,使用 code 授权码 |
| 54 | -export function socialQuickLogin(type, code, state) { | 57 | +export function socialLogin(type, code, state) { |
| 55 | return request({ | 58 | return request({ |
| 56 | - url: '/system/auth/social-quick-login', | 59 | + url: '/system/auth/social-login', |
| 57 | method: 'post', | 60 | method: 'post', |
| 58 | data: { | 61 | data: { |
| 59 | type, | 62 | type, |
| @@ -63,21 +66,6 @@ export function socialQuickLogin(type, code, state) { | @@ -63,21 +66,6 @@ export function socialQuickLogin(type, code, state) { | ||
| 63 | }) | 66 | }) |
| 64 | } | 67 | } |
| 65 | 68 | ||
| 66 | -// 社交绑定登录,使用 code 授权码 + + 账号密码 | ||
| 67 | -export function socialBindLogin(type, code, state, username, password) { | ||
| 68 | - return request({ | ||
| 69 | - url: '/system/auth/social-bind-login', | ||
| 70 | - method: 'post', | ||
| 71 | - data: { | ||
| 72 | - type, | ||
| 73 | - code, | ||
| 74 | - state, | ||
| 75 | - username, | ||
| 76 | - password | ||
| 77 | - } | ||
| 78 | - }) | ||
| 79 | -} | ||
| 80 | - | ||
| 81 | // 获取登录验证码 | 69 | // 获取登录验证码 |
| 82 | export function sendSmsCode(mobile, scene) { | 70 | export function sendSmsCode(mobile, scene) { |
| 83 | return request({ | 71 | return request({ |
yudao-ui-admin/src/store/modules/user.js
| 1 | -import {login, logout, getInfo, socialQuickLogin, socialBindLogin, smsLogin} from '@/api/login' | 1 | +import {login, logout, getInfo, socialLogin, socialBindLogin, smsLogin} from '@/api/login' |
| 2 | import {getAccessToken, setToken, removeToken, getRefreshToken} from '@/utils/auth' | 2 | import {getAccessToken, setToken, removeToken, getRefreshToken} from '@/utils/auth' |
| 3 | 3 | ||
| 4 | const user = { | 4 | const user = { |
| @@ -38,8 +38,12 @@ const user = { | @@ -38,8 +38,12 @@ const user = { | ||
| 38 | const password = userInfo.password | 38 | const password = userInfo.password |
| 39 | const code = userInfo.code | 39 | const code = userInfo.code |
| 40 | const uuid = userInfo.uuid | 40 | const uuid = userInfo.uuid |
| 41 | + const socialCode = userInfo.socialCode | ||
| 42 | + const socialState = userInfo.socialState | ||
| 43 | + const socialType = userInfo.socialType | ||
| 41 | return new Promise((resolve, reject) => { | 44 | return new Promise((resolve, reject) => { |
| 42 | - login(username, password, code, uuid).then(res => { | 45 | + login(username, password, code, uuid, |
| 46 | + socialType, socialCode, socialState).then(res => { | ||
| 43 | res = res.data; | 47 | res = res.data; |
| 44 | // 设置 token | 48 | // 设置 token |
| 45 | setToken(res) | 49 | setToken(res) |
| @@ -56,7 +60,7 @@ const user = { | @@ -56,7 +60,7 @@ const user = { | ||
| 56 | const state = userInfo.state | 60 | const state = userInfo.state |
| 57 | const type = userInfo.type | 61 | const type = userInfo.type |
| 58 | return new Promise((resolve, reject) => { | 62 | return new Promise((resolve, reject) => { |
| 59 | - socialQuickLogin(type, code, state).then(res => { | 63 | + socialLogin(type, code, state).then(res => { |
| 60 | res = res.data; | 64 | res = res.data; |
| 61 | // 设置 token | 65 | // 设置 token |
| 62 | setToken(res) | 66 | setToken(res) |
| @@ -67,25 +71,7 @@ const user = { | @@ -67,25 +71,7 @@ const user = { | ||
| 67 | }) | 71 | }) |
| 68 | }, | 72 | }, |
| 69 | 73 | ||
| 70 | - // 社交登录 | ||
| 71 | - SocialLogin2({ commit }, userInfo) { | ||
| 72 | - const code = userInfo.code | ||
| 73 | - const state = userInfo.state | ||
| 74 | - const type = userInfo.type | ||
| 75 | - const username = userInfo.username.trim() | ||
| 76 | - const password = userInfo.password | ||
| 77 | - return new Promise((resolve, reject) => { | ||
| 78 | - socialBindLogin(type, code, state, username, password).then(res => { | ||
| 79 | - res = res.data; | ||
| 80 | - // 设置 token | ||
| 81 | - setToken(res) | ||
| 82 | - resolve() | ||
| 83 | - }).catch(error => { | ||
| 84 | - reject(error) | ||
| 85 | - }) | ||
| 86 | - }) | ||
| 87 | - }, | ||
| 88 | - // 登录 | 74 | + // 短信登录 |
| 89 | SmsLogin({ commit }, userInfo) { | 75 | SmsLogin({ commit }, userInfo) { |
| 90 | const mobile = userInfo.mobile.trim() | 76 | const mobile = userInfo.mobile.trim() |
| 91 | const mobileCode = userInfo.mobileCode | 77 | const mobileCode = userInfo.mobileCode |
yudao-ui-admin/src/views/socialLogin.vue
| @@ -87,6 +87,8 @@ export default { | @@ -87,6 +87,8 @@ export default { | ||
| 87 | username: "admin", | 87 | username: "admin", |
| 88 | password: "admin123", | 88 | password: "admin123", |
| 89 | rememberMe: false, | 89 | rememberMe: false, |
| 90 | + code: "", | ||
| 91 | + uuid: "", | ||
| 90 | }, | 92 | }, |
| 91 | loginRules: { | 93 | loginRules: { |
| 92 | username: [ | 94 | username: [ |
| @@ -170,16 +172,20 @@ export default { | @@ -170,16 +172,20 @@ export default { | ||
| 170 | removeUsername() | 172 | removeUsername() |
| 171 | removePassword() | 173 | removePassword() |
| 172 | } | 174 | } |
| 173 | - this.$store.dispatch("SocialLogin2", { | ||
| 174 | - code: this.code, | ||
| 175 | - state: this.state, | ||
| 176 | - type: this.type, | 175 | + this.$store.dispatch("Login", { |
| 176 | + socialCode: this.code, | ||
| 177 | + socialState: this.state, | ||
| 178 | + socialType: this.type, | ||
| 179 | + // 账号密码登录 | ||
| 177 | username: this.loginForm.username, | 180 | username: this.loginForm.username, |
| 178 | - password: this.loginForm.password | 181 | + password: this.loginForm.password, |
| 182 | + code: this.loginForm.code, | ||
| 183 | + uuid: this.loginForm.uuid, | ||
| 179 | }).then(() => { | 184 | }).then(() => { |
| 180 | this.$router.push({ path: this.redirect || "/" }).catch(()=>{}); | 185 | this.$router.push({ path: this.redirect || "/" }).catch(()=>{}); |
| 181 | }).catch(() => { | 186 | }).catch(() => { |
| 182 | this.loading = false; | 187 | this.loading = false; |
| 188 | + this.getCode() | ||
| 183 | }); | 189 | }); |
| 184 | } | 190 | } |
| 185 | }); | 191 | }); |