Commit 450ca8f907f6e6416d8edb9353a1a00e5a0ceb04

Authored by timfruit
1 parent 13a94050

完成剩下的公众号登录功能修改

yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/SysAuthController.java
... ... @@ -81,19 +81,6 @@ public class SysAuthController {
81 81 return CommonResult.success(socialService.getAuthorizeUrl(type, redirectUri));
82 82 }
83 83  
84   - // TODO @timfruit:这个接口,是要删除的么?
85   - @GetMapping("/social-login-get")
86   - @ApiOperation("微信公众号授权回调地址,输出social-login2的必要参数用于测试,使用 code 授权码")
87   - @ResponseBody
88   - @Deprecated
89   - public CommonResult<MbrAuthSocialLoginReqVO> socialLoginGet(HttpServletRequest request,String code,String state) {
90   - // 返回结果
91   - MbrAuthSocialLoginReqVO reqVO = MbrAuthSocialLoginReqVO.builder().state(state).code(code).build();
92   - reqVO.setType(12);
93   - //输出social-login2的必要参数用于测试
94   - System.out.println(JSON.toJSON(reqVO));
95   - return success(reqVO);
96   - }
97 84  
98 85 @PostMapping("/social-login")
99 86 @ApiOperation("社交登录,使用 code 授权码")
... ... @@ -102,10 +89,9 @@ public class SysAuthController {
102 89 return success(SysAuthLoginRespVO.builder().token(token).build());
103 90 }
104 91  
105   - // TODO @timfruit:社交登陆时,使用手机验证码来验证哈。这块我当时没设计好,改改,嘿嘿。
106 92  
107 93 @PostMapping("/social-login2")
108   - @ApiOperation("社交登录,使用 code 授权码 + 账号密码")
  94 + @ApiOperation("社交登录,使用 手机号 + 手机验证码")
109 95 public CommonResult<SysAuthLoginRespVO> socialLogin2(@RequestBody @Valid MbrAuthSocialLogin2ReqVO reqVO) {
110 96 String token = authService.socialLogin2(reqVO, getClientIP(), getUserAgent());
111 97 return success(SysAuthLoginRespVO.builder().token(token).build());
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/controller/auth/vo/MbrAuthSocialLogin2ReqVO.java
... ... @@ -34,15 +34,16 @@ public class MbrAuthSocialLogin2ReqVO {
34 34 @NotEmpty(message = "state 不能为空")
35 35 private String state;
36 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;
  37 + @ApiModelProperty(value = "手机号", required = true, example = "15119100000")
  38 + @NotEmpty(message = "手机号不能为空")
  39 + @Length(min = 11, max = 11, message = "手机号是11位数字")
  40 + private String mobile;
  41 +
  42 + @ApiModelProperty(value = "手机验证码", required = true, example = "1024")
  43 + @NotEmpty(message = "手机验证码不能为空")
  44 + @Length(min = 4, max = 6, message = "手机验证码长度为 4-6 位")
  45 + @Pattern(regexp = "^[0-9]+$", message = "手机验证码必须都是数字")
  46 + private String smsCode;
  47 +
47 48  
48 49 }
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/SysAuthService.java
... ... @@ -46,7 +46,7 @@ public interface SysAuthService extends SecurityAuthFrameworkService {
46 46 String socialLogin(@Valid MbrAuthSocialLoginReqVO reqVO, String userIp, String userAgent);
47 47  
48 48 /**
49   - * 社交登录,使用 code 授权码 + 账号密码
  49 + * 社交登录,使用 手机号 + 手机验证码
50 50 *
51 51 * @param reqVO 登录信息
52 52 * @param userIp 用户 IP
... ...
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/system/service/auth/impl/SysAuthServiceImpl.java
... ... @@ -140,19 +140,21 @@ public class SysAuthServiceImpl implements SysAuthService {
140 140  
141 141 @Override
142 142 public String socialLogin2(MbrAuthSocialLogin2ReqVO reqVO, String userIp, String userAgent) {
143   - // 使用 code 授权码,进行登录
144 143 AuthUser authUser = socialService.getAuthUser(reqVO.getType(), reqVO.getCode(), reqVO.getState());
145 144 org.springframework.util.Assert.notNull(authUser, "授权用户不为空");
146 145  
147   - // 使用账号密码,进行登录。
148   - LoginUser loginUser = this.login0(reqVO.getUsername(), reqVO.getPassword());
149   -// loginUser.setRoleIds(this.getUserRoleIds(loginUser.getId())); // 获取用户角色列表
  146 + // 使用手机号、手机验证码登录
  147 + SysAuthSmsLoginReqVO loginReqVO = SysAuthSmsLoginReqVO
  148 + .builder()
  149 + .mobile(reqVO.getMobile())
  150 + .code(reqVO.getSmsCode())
  151 + .build();
  152 + String sessionId = this.smsLogin(loginReqVO, userIp, userAgent);
  153 + LoginUser loginUser = userSessionCoreService.getLoginUser(sessionId);
150 154  
151 155 // 绑定社交用户(新增)
152 156 socialService.bindSocialUser(loginUser.getId(), reqVO.getType(), authUser, USER_TYPE_ENUM);
153   -
154   - // 缓存登录用户到 Redis 中,返回 sessionId 编号
155   - return userSessionCoreService.createUserSession(loginUser, userIp, userAgent);
  157 + return sessionId;
156 158 }
157 159  
158 160 @Override
... ...
yudao-user-server/src/main/resources/static/social-login.html
... ... @@ -13,14 +13,16 @@
13 13 </div>
14 14 </body>
15 15 <script>
16   - let server = 'http://127.0.0.1:28080';
  16 + // let server = 'http://127.0.0.1:28080';
  17 + let server = 'http://192.168.1.2:28080';
  18 +
17 19  
18 20 // 微信公众号
19 21 $( "#wx_pub").on( "click", function() {
20 22 // 获得授权链接
21 23 $.ajax({
22 24 url: server + "/api/social-auth-redirect?type=31&redirectUri=" +
23   - encodeURIComponent(server + '/api/social-login-get'),
  25 + encodeURIComponent(server + '/static/social-login2.html'), //重定向地址
24 26 method: 'GET',
25 27 success: function( result ) {
26 28 if (result.code !== 0) {
... ...
yudao-user-server/src/main/resources/static/social-login2.html 0 → 100644
  1 +<!DOCTYPE html>
  2 +<html>
  3 +<head>
  4 + <meta charset="UTF-8">
  5 + <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"/>
  6 + <title>社交登陆测试页</title>
  7 + <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
  8 +</head>
  9 +<body>
  10 +<div>点击如下按钮,授权登录</div>
  11 +<div>
  12 + 手机号<input id="mobile" value="15601691300"><br>
  13 + 手机验证码<input id="smsCode">
  14 + <button id="send_sms_code">发送手机验证码</button>
  15 + <br>
  16 + <button id="wx_pub">微信公众号授权登录</button>
  17 +</div>
  18 +</body>
  19 +<script>
  20 + // let server = 'http://127.0.0.1:28080';
  21 + let server = 'http://192.168.1.2:28080';
  22 +
  23 + let type = 31; //登录类型 微信公众号
  24 +
  25 + // 微信公众号
  26 + $("#wx_pub").on("click", function () {
  27 + let code = getUrlParam("code"); // 访问授权连接后,会回调本页面地址,参数在本页面url后面
  28 + let state = getUrlParam("state");
  29 + console.log("获取code: " + code + ", state: " + state)
  30 +
  31 + let data = {
  32 + 'mobile': $('#mobile').val(),
  33 + 'smsCode': $('#smsCode').val(),
  34 + 'code': code,
  35 + 'state': state,
  36 + 'type': type
  37 + }
  38 +
  39 + // 调用授权登录接口
  40 + $.ajax({
  41 + url: server + "/api/social-login2",
  42 + method: 'POST',
  43 + data: JSON.stringify(data),
  44 + contentType: "application/json;charset=utf-8",
  45 + dataType: "json",
  46 + success: function( result ) {
  47 + if (result.code !== 0) {
  48 + alert('调用授权登录接口失败,原因:' + result.msg)
  49 + return;
  50 + }
  51 + alert("授权登录成功, token: "+result.data.token)
  52 + }
  53 + })
  54 + });
  55 +
  56 + // 发送手机验证码
  57 + $("#send_sms_code").on("click", function () {
  58 + let data = {
  59 + 'mobile': $('#mobile').val(),
  60 + 'scene': 1 // 手机号登陆 类型
  61 + }
  62 + $.ajax({
  63 + url: server + "/api/send-sms-code",
  64 + method: 'POST',
  65 + data: JSON.stringify(data),
  66 + contentType: "application/json;charset=utf-8",
  67 + dataType: "json",
  68 + success: function (result) {
  69 + if (result.code !== 0) {
  70 + alert('发送手机验证码失败,原因:' + result.msg)
  71 + return;
  72 + }
  73 + alert("发送成功, 请查看日志");
  74 + }
  75 + })
  76 + })
  77 +
  78 +
  79 + //获取url中的参数
  80 + function getUrlParam(name) {
  81 + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
  82 + var r = window.location.search.substr(1).match(reg); //匹配目标参数
  83 + if (r != null) return unescape(r[2]);
  84 + return null; //返回参数值
  85 + }
  86 +</script>
  87 +</html>
... ...