From 02d385dbe74a1712a70b11ab889677aa34a039b4 Mon Sep 17 00:00:00 2001 From: cl Date: Tue, 1 Jun 2021 16:27:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E5=86=8C=E7=BB=91=E5=AE=9A=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E5=8F=B7=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../YamiSysUserDetailsServiceImpl.java | 11 ++ .../controller/UserRegisterController.java | 164 +++++++++++++++++- .../api/security/YamiUserServiceImpl.java | 26 +++ .../shop/bean/param/UserRegisterParam.java | 24 +++ .../yami/shop/common/util/PrincipalUtil.java | 36 ++++ yami-shop-security/pom.xml | 2 +- .../security/service/AppConnectService.java | 4 + .../yami/shop/security/service/YamiUser.java | 80 +++++++-- .../service/YamiUserDetailsService.java | 5 + .../service/impl/AppConnectServiceImpl.java | 58 +++++++ .../com/yami/shop/service/UserService.java | 2 + .../shop/service/impl/UserServiceImpl.java | 20 +++ 12 files changed, 415 insertions(+), 17 deletions(-) create mode 100644 yami-shop-common/src/main/java/com/yami/shop/common/util/PrincipalUtil.java diff --git a/yami-shop-admin/src/main/java/com/yami/shop/admin/security/YamiSysUserDetailsServiceImpl.java b/yami-shop-admin/src/main/java/com/yami/shop/admin/security/YamiSysUserDetailsServiceImpl.java index cc0bc12..8fdfb36 100644 --- a/yami-shop-admin/src/main/java/com/yami/shop/admin/security/YamiSysUserDetailsServiceImpl.java +++ b/yami-shop-admin/src/main/java/com/yami/shop/admin/security/YamiSysUserDetailsServiceImpl.java @@ -12,6 +12,7 @@ package com.yami.shop.admin.security; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.yami.shop.bean.model.User; import com.yami.shop.common.util.CacheManagerUtil; import com.yami.shop.sys.constant.Constant; import com.yami.shop.security.enums.App; @@ -122,4 +123,14 @@ public class YamiSysUserDetailsServiceImpl implements YamiUserDetailsService { public YamiUser loadUserByUserMail(String userMail, String loginPassword) { return null; } + + @Override + public User loadUserByMobileOrUserName(String mobileOrUserName, Integer loginType) { + return null; + } + + @Override + public YamiUser getYamiUser(Integer appId, User user, String bizUserId) { + return null; + } } diff --git a/yami-shop-api/src/main/java/com/yami/shop/api/controller/UserRegisterController.java b/yami-shop-api/src/main/java/com/yami/shop/api/controller/UserRegisterController.java index 2ae02ec..7cfbcb9 100644 --- a/yami-shop-api/src/main/java/com/yami/shop/api/controller/UserRegisterController.java +++ b/yami-shop-api/src/main/java/com/yami/shop/api/controller/UserRegisterController.java @@ -1,21 +1,31 @@ package com.yami.shop.api.controller; +import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.yami.shop.api.security.AuthenticationToken; +import com.yami.shop.bean.enums.SmsType; import com.yami.shop.bean.model.User; import com.yami.shop.bean.param.UserRegisterParam; import com.yami.shop.common.exception.YamiShopBindException; import com.yami.shop.common.util.IPHelper; +import com.yami.shop.common.util.PrincipalUtil; +import com.yami.shop.mp.config.WxMaConfiguration; +import com.yami.shop.security.enums.App; import com.yami.shop.security.handler.LoginAuthSuccessHandler; import com.yami.shop.security.model.AppConnect; +import com.yami.shop.security.service.AppConnectService; +import com.yami.shop.security.service.YamiUser; import com.yami.shop.security.service.YamiUserDetailsService; +import com.yami.shop.security.util.SecurityUtils; +import com.yami.shop.service.SmsLogService; import com.yami.shop.service.UserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.oauth2.provider.token.ConsumerTokenServices; import org.springframework.web.bind.annotation.*; @@ -24,6 +34,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.util.Date; +import java.util.Objects; /** * 用户信息 @@ -38,8 +49,22 @@ public class UserRegisterController { private final UserService userService; + private final SmsLogService smsLogService; + + private final AppConnectService appConnectService; + + private final LoginAuthSuccessHandler loginAuthSuccessHandler; + + private final WxMaConfiguration wxConfig; + + private final YamiUserDetailsService yamiUserDetailsService; + private final PasswordEncoder passwordEncoder; + public static final String CHECK_REGISTER_SMS_FLAG = "checkRegisterSmsFlag"; + + public static final String CHECK_UPDATE_PWD_SMS_FLAG = "updatePwdSmsFlag"; + @PostMapping("/register") @ApiOperation(value = "注册", notes = "用户注册或绑定手机号接口") public ResponseEntity register(@Valid @RequestBody UserRegisterParam userRegisterParam) { @@ -54,19 +79,152 @@ public class UserRegisterController { User user = userService.getOne(new LambdaQueryWrapper().eq(User::getUserMobile, userRegisterParam.getUserMail())); if (user == null) { // 无法获取用户信息 - throw new YamiShopBindException("yami.user.no.exist"); + throw new YamiShopBindException("无法获取用户信息"); } if (StrUtil.isBlank(userRegisterParam.getPassword())) { // 新密码不能为空 - throw new YamiShopBindException("yami.user.password.no.exist"); + throw new YamiShopBindException("新密码不能为空"); } if (StrUtil.equals(passwordEncoder.encode(userRegisterParam.getPassword()), user.getLoginPassword())) { // 新密码不能与原密码相同 - throw new YamiShopBindException("yami.user.password.check"); + throw new YamiShopBindException("新密码不能与原密码相同"); } user.setModifyTime(new Date()); user.setLoginPassword(passwordEncoder.encode(userRegisterParam.getPassword())); userService.updateById(user); return ResponseEntity.ok().build(); } + + @PutMapping("/registerOrBindUser") + @ApiOperation(value="注册或绑定手机号", notes="用户注册或绑定手机号接口") + public ResponseEntity register(HttpServletRequest request, HttpServletResponse response, @Valid @RequestBody UserRegisterParam userRegisterParam) { + + String mobile = userRegisterParam.getMobile(); + AppConnect appConnect = null; + User user = null; + String bizUserId = null; + boolean isWxAppId = Objects.equals(userRegisterParam.getAppType(), App.MINI.value()) || Objects.equals(userRegisterParam.getAppType(), App.MP.value()); + if(isWxAppId) { + bizUserId = SecurityUtils.getUser().getBizUserId(); + } + + // 正在进行注册,通过验证码校验 + if (Objects.equals(userRegisterParam.getRegisterOrBind(), 1)) { + + // 看看有没有校验验证码成功的标识 + userService.validate(userRegisterParam, CHECK_REGISTER_SMS_FLAG + userRegisterParam.getCheckRegisterSmsFlag()); + // 正在进行申请注册 + if (userService.count(new LambdaQueryWrapper().eq(User::getUserMobile,userRegisterParam.getMobile())) > 0) { + // 手机号已存在,无法注册 + throw new YamiShopBindException("yami.user.phone.exist"); + } + } + // 小程序注册/绑定手机号 + else { + YamiUser yamiUser = SecurityUtils.getUser(); + + appConnect = appConnectService.getByBizUserId(yamiUser.getBizUserId(), App.instance(yamiUser.getAppType())); + // 通过微信手机号校验 + if (Objects.equals(2, userRegisterParam.getValidateType())) { + try { + WxMaPhoneNumberInfo wxMaPhoneNumberInfo = wxConfig.wxMaService().getUserService().getPhoneNoInfo(yamiUser.getSessionKey(), userRegisterParam.getEncryptedData(), userRegisterParam.getIvStr()); + mobile = wxMaPhoneNumberInfo.getPhoneNumber(); + + } catch (Exception e) { + // 授权失败,请重新授权 + throw new YamiShopBindException(" 授权失败,请重新授权"); + } + if (StrUtil.isBlank(mobile)) { + // 无法获取用户手机号信息 + throw new YamiShopBindException("无法获取用户手机号信息"); + } + user = yamiUserDetailsService.loadUserByMobileOrUserName(mobile, 0); + } + // 通过账号密码校验 + else if (Objects.equals(3, userRegisterParam.getValidateType())) { + user = yamiUserDetailsService.loadUserByMobileOrUserName(mobile, 0); + if (user == null) { + // 账号或密码不正确 + throw new YamiShopBindException("yami.user.account.error"); + } + String encodedPassword = user.getLoginPassword(); + String rawPassword = userRegisterParam.getPassword(); + // 密码不正确 + if (StrUtil.isBlank(encodedPassword) || !passwordEncoder.matches(rawPassword,encodedPassword)){ + // 账号或密码不正确 + throw new YamiShopBindException("yami.user.account.error"); + } + } + // 通过验证码校验 + else { + if (!smsLogService.checkValidCode(userRegisterParam.getMobile(), userRegisterParam.getValidCode(), SmsType.VALID)){ + // 验证码有误或已过期 + throw new YamiShopBindException("yami.user.code.error"); + } + } + } + + Date now = new Date(); + + // 尝试用手机号获取用户信息 + if (user == null && StrUtil.isNotBlank(mobile)) { + user = userService.getOne(new LambdaQueryWrapper().eq(User::getUserMobile,mobile)); + } + + // 新建用户 + if (user == null) { + user = new User(); + if (StrUtil.isBlank(userRegisterParam.getUserName())) { + userRegisterParam.setUserName(mobile); + } + + // 如果有用户名,就判断用户名格式是否正确 + if (!PrincipalUtil.isUserName(userRegisterParam.getUserName())) { + throw new YamiShopBindException("用户名应由4-16位数字字母下划线组成"); + } + + user.setModifyTime(now); + user.setUserRegtime(now); + user.setUserRegip(IPHelper.getIpAddr()); + user.setStatus(1); + + user.setPic(userRegisterParam.getImg()); + user.setUserMobile(mobile); + if (StrUtil.isNotBlank(userRegisterParam.getPassword())) { + user.setLoginPassword(passwordEncoder.encode(userRegisterParam.getPassword())); + } + // 用户名就是默认的昵称 + user.setNickName(StrUtil.isBlank(userRegisterParam.getNickName())? userRegisterParam.getUserName(): userRegisterParam.getNickName()); +// } else { +// String userId = user.getUserId(); +// // 绑定账号 +// if (Objects.equals(userRegisterParam.getRegisterOrBind(),2)) { +// int count = appConnectService.count(new LambdaQueryWrapper().eq(AppConnect::getUserId, userId).eq(AppConnect::getAppId, userRegisterParam.getAppType())); +// if (count > 0) { +// throw new YamiShopBindException("该账号已被绑定,请换个账号试试"); +// } +// } + + } + if(Objects.nonNull(bizUserId)){ + appConnect = new AppConnect(); + appConnect.setBizUserId(bizUserId); + } + + appConnectService.registerOrBindUser(user, appConnect, userRegisterParam.getAppType()); + + + //进行授权登录 + UserDetails userDetails = yamiUserDetailsService.getYamiUser(userRegisterParam.getAppType(),user, bizUserId); + AuthenticationToken authenticationToken = new AuthenticationToken(); + authenticationToken.setPrincipal(user.getUserMobile()); + authenticationToken.setCredentials(user.getLoginPassword()); + authenticationToken.setPrincipal(userDetails.getUsername()); + authenticationToken.setDetails(userDetails); + authenticationToken.setAuthenticated(true); + loginAuthSuccessHandler.onAuthenticationSuccess(request,response,authenticationToken); + + return ResponseEntity.ok().build(); + } + } diff --git a/yami-shop-api/src/main/java/com/yami/shop/api/security/YamiUserServiceImpl.java b/yami-shop-api/src/main/java/com/yami/shop/api/security/YamiUserServiceImpl.java index 72a47a6..716b525 100644 --- a/yami-shop-api/src/main/java/com/yami/shop/api/security/YamiUserServiceImpl.java +++ b/yami-shop-api/src/main/java/com/yami/shop/api/security/YamiUserServiceImpl.java @@ -13,10 +13,12 @@ package com.yami.shop.api.security; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.emoji.EmojiUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.yami.shop.bean.model.User; import com.yami.shop.common.annotation.RedisLock; import com.yami.shop.common.exception.YamiShopBindException; import com.yami.shop.common.util.CacheManagerUtil; +import com.yami.shop.common.util.PrincipalUtil; import com.yami.shop.dao.UserMapper; import com.yami.shop.security.dao.AppConnectMapper; import com.yami.shop.security.enums.App; @@ -146,4 +148,28 @@ public class YamiUserServiceImpl implements YamiUserDetailsService { yamiUser.setPic(user.getPic()); return yamiUser; } + + @Override + public User loadUserByMobileOrUserName(String mobileOrUserName, Integer loginType) { + User user = null; + // 手机验证码登陆,或传过来的账号很像手机号 + if (Objects.equals(loginType, 1) || PrincipalUtil.isMobile(mobileOrUserName)) { + user = userMapper.selectOne(new LambdaQueryWrapper().eq(User::getUserMobile, mobileOrUserName)); + } + return user; + } + + @Override + public YamiUser getYamiUser(Integer appId, User user, String bizUserId) { + String name = StrUtil.isBlank(user.getRealName()) ? user.getNickName() : user.getRealName(); + YamiUser yamiUser = new YamiUser(); + yamiUser.setEnabled(user.getStatus() == 1); + yamiUser.setUserId(user.getUserId()); + yamiUser.setBizUserId(bizUserId); + yamiUser.setAppType(appId); + yamiUser.setName(name); + yamiUser.setPic(user.getPic()); + yamiUser.setPassword(user.getLoginPassword()); + return yamiUser; + } } diff --git a/yami-shop-bean/src/main/java/com/yami/shop/bean/param/UserRegisterParam.java b/yami-shop-bean/src/main/java/com/yami/shop/bean/param/UserRegisterParam.java index faa9210..a155c7c 100644 --- a/yami-shop-bean/src/main/java/com/yami/shop/bean/param/UserRegisterParam.java +++ b/yami-shop-bean/src/main/java/com/yami/shop/bean/param/UserRegisterParam.java @@ -32,4 +32,28 @@ public class UserRegisterParam { @ApiModelProperty(value = "应用类型 1小程序 2微信公众号 3 PC 4 h5") private Integer appType; + + @ApiModelProperty(value = "手机号") + private String mobile; + + @ApiModelProperty(value = "验证码") + private String validCode; + + @ApiModelProperty(value = "微信小程序的encryptedData") + private String encryptedData; + + @ApiModelProperty(value = "微信小程序的ivStr") + private String ivStr; + + @ApiModelProperty(value = "头像") + private String img; + + @ApiModelProperty(value = "校验登陆注册验证码成功的标识") + private String checkRegisterSmsFlag; + + @ApiModelProperty(value = "验证类型 1验证码验证 2 小程序encryptedData验证 3 密码验证 ") + private Integer validateType; + + @ApiModelProperty(value = "验证类型 1注册 2绑定 ") + private Integer registerOrBind; } diff --git a/yami-shop-common/src/main/java/com/yami/shop/common/util/PrincipalUtil.java b/yami-shop-common/src/main/java/com/yami/shop/common/util/PrincipalUtil.java new file mode 100644 index 0000000..b08aa1d --- /dev/null +++ b/yami-shop-common/src/main/java/com/yami/shop/common/util/PrincipalUtil.java @@ -0,0 +1,36 @@ +package com.yami.shop.common.util; + +import cn.hutool.core.util.StrUtil; + +import java.util.regex.Pattern; + +/** + * 正则表达式工具 + * @author LGH + */ +public class PrincipalUtil { + + /** + * 以1开头,后面跟10位数 + */ + public static final String MOBILE_REGEXP = "1[0-9]{10}"; + + /** + * 数字字母下划线 4-16位 + */ + public static final String USER_NAME_REGEXP = "([a-zA-Z0-9_]{4,16})"; + + public static boolean isMobile(String value) { + if(StrUtil.isBlank(value)) { + return false; + } + return Pattern.matches(MOBILE_REGEXP, value); + } + + public static boolean isUserName(String value) { + if(StrUtil.isBlank(value)) { + return false; + } + return Pattern.matches(USER_NAME_REGEXP, value); + } +} diff --git a/yami-shop-security/pom.xml b/yami-shop-security/pom.xml index d87dfcb..a5c1db0 100644 --- a/yami-shop-security/pom.xml +++ b/yami-shop-security/pom.xml @@ -14,7 +14,7 @@ com.yami.shop - yami-shop-common + yami-shop-service ${yami.shop.version} diff --git a/yami-shop-security/src/main/java/com/yami/shop/security/service/AppConnectService.java b/yami-shop-security/src/main/java/com/yami/shop/security/service/AppConnectService.java index 6c75a55..804e4f9 100644 --- a/yami-shop-security/src/main/java/com/yami/shop/security/service/AppConnectService.java +++ b/yami-shop-security/src/main/java/com/yami/shop/security/service/AppConnectService.java @@ -12,6 +12,7 @@ package com.yami.shop.security.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.yami.shop.bean.model.User; import com.yami.shop.security.enums.App; import com.yami.shop.security.model.AppConnect; @@ -22,4 +23,7 @@ import com.yami.shop.security.model.AppConnect; public interface AppConnectService extends IService { AppConnect getByBizUserId(String bizUserId, App app); + + User registerOrBindUser(User user, AppConnect appConnect, Integer appId); + } diff --git a/yami-shop-security/src/main/java/com/yami/shop/security/service/YamiUser.java b/yami-shop-security/src/main/java/com/yami/shop/security/service/YamiUser.java index b2f6fda..4d7e0e4 100644 --- a/yami-shop-security/src/main/java/com/yami/shop/security/service/YamiUser.java +++ b/yami-shop-security/src/main/java/com/yami/shop/security/service/YamiUser.java @@ -11,10 +11,12 @@ package com.yami.shop.security.service; import cn.hutool.core.util.StrUtil; +import lombok.Data; import lombok.Getter; import lombok.Setter; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; import java.util.Collection; import java.util.Collections; @@ -22,39 +24,91 @@ import java.util.Collections; /** * 用户详细信息 */ -@Getter -public class YamiUser extends User { +@Data +public class YamiUser implements UserDetails { /** * 用户ID */ - @Setter private String userId; - @Setter private String bizUserId; - @Setter private String pic; - @Setter private String name; - @Setter private boolean debugger; - @Setter private String password; + private Integer appType; + + private boolean enabled; + + /** + * 自提点Id + */ + private Long stationId; + + /** + * 店铺Id + */ + private Long shopId; + /** + * 小程序session_key + */ + private String sessionKey; + + public YamiUser() { + + } + + public YamiUser(String userId, String bizUserId, Integer appType, boolean enabled) { + this.userId = userId; + this.bizUserId = bizUserId; + this.appType = appType; + this.enabled = enabled; + } + public YamiUser(String userId, String password, boolean enabled) { - super(userId, password, enabled,true, true, true , Collections.emptyList()); this.userId = userId; this.password = password; + this.enabled = enabled; } - public YamiUser(String userId, String bizUserId, Integer appId, boolean enabled) { - super(appId + StrUtil.COLON + bizUserId, "", enabled,true, true, true , Collections.emptyList()); - this.userId = userId; - this.bizUserId = bizUserId; + @Override + public Collection getAuthorities() { + return Collections.emptyList(); + } + + @Override + public String getPassword() { + return this.password; + } + + @Override + public String getUsername() { + return StrUtil.isBlank(userId)? bizUserId: userId; + } + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return true; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return this.enabled; } } diff --git a/yami-shop-security/src/main/java/com/yami/shop/security/service/YamiUserDetailsService.java b/yami-shop-security/src/main/java/com/yami/shop/security/service/YamiUserDetailsService.java index c45ec83..e68cad1 100644 --- a/yami-shop-security/src/main/java/com/yami/shop/security/service/YamiUserDetailsService.java +++ b/yami-shop-security/src/main/java/com/yami/shop/security/service/YamiUserDetailsService.java @@ -10,6 +10,7 @@ package com.yami.shop.security.service; +import com.yami.shop.bean.model.User; import com.yami.shop.security.enums.App; import com.yami.shop.security.exception.UsernameNotFoundExceptionBase; import com.yami.shop.security.model.AppConnect; @@ -45,4 +46,8 @@ public interface YamiUserDetailsService extends UserDetailsService { * @return */ YamiUser loadUserByUserMail(String userMail, String loginPassword); + + User loadUserByMobileOrUserName(String mobileOrUserName, Integer loginType); + + YamiUser getYamiUser(Integer appId, User user, String bizUserId); } diff --git a/yami-shop-security/src/main/java/com/yami/shop/security/service/impl/AppConnectServiceImpl.java b/yami-shop-security/src/main/java/com/yami/shop/security/service/impl/AppConnectServiceImpl.java index 3406d9a..a72c74b 100644 --- a/yami-shop-security/src/main/java/com/yami/shop/security/service/impl/AppConnectServiceImpl.java +++ b/yami-shop-security/src/main/java/com/yami/shop/security/service/impl/AppConnectServiceImpl.java @@ -10,16 +10,26 @@ package com.yami.shop.security.service.impl; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yami.shop.bean.model.User; +import com.yami.shop.common.exception.YamiShopBindException; +import com.yami.shop.dao.UserMapper; import com.yami.shop.security.dao.AppConnectMapper; import com.yami.shop.security.enums.App; import com.yami.shop.security.model.AppConnect; import com.yami.shop.security.service.AppConnectService; +import com.yami.shop.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.Date; +import java.util.Objects; /** @@ -32,6 +42,12 @@ public class AppConnectServiceImpl extends ServiceImpl().eq(User::getUserMobile, user.getUserMobile())) > 0) { + // 该电话号码已存在 + throw new YamiShopBindException("该电话号码已存在"); + } + String userId = IdUtil.simpleUUID(); + user.setUserId(userId); + userMapper.insert(user); + } else { + if (appConnect != null&& StrUtil.isBlank(user.getPic())) { + User userParam = new User(); + userParam.setUserId(user.getUserId()); + userParam.setModifyTime(new Date()); + userParam.setPic(appConnect.getImageUrl()); + userService.updateById(userParam); + } + } + if (appConnect == null) { + // 避免重复插入数据 + if (appConnectMapper.getByBizUserId(user.getUserId(), appId) != null) { + return user; + } + appConnect = new AppConnect(); + appConnect.setUserId(user.getUserId()); + appConnect.setNickName(user.getNickName()); + appConnect.setImageUrl(user.getPic()); + + // 0表示是系统的用户,不是第三方的 + appConnect.setAppId(appId); + appConnectMapper.insert(appConnect); + } else if (StrUtil.isBlank(appConnect.getUserId()) || Objects.isNull(appId)) { + appConnect.setAppId(appId); + appConnect.setUserId(user.getUserId()); + appConnect.setUserId(user.getUserId()); + appConnectMapper.updateById(appConnect); + } + + return user; + } } diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/UserService.java b/yami-shop-service/src/main/java/com/yami/shop/service/UserService.java index 61e3d09..3cb29b1 100644 --- a/yami-shop-service/src/main/java/com/yami/shop/service/UserService.java +++ b/yami-shop-service/src/main/java/com/yami/shop/service/UserService.java @@ -24,4 +24,6 @@ public interface UserService extends IService { User getUserByUserId(String userId); Boolean insertUser(UserRegisterParam userRegisterParam); + + void validate(UserRegisterParam userRegisterParam, String checkRegisterSmsFlag); } diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/impl/UserServiceImpl.java b/yami-shop-service/src/main/java/com/yami/shop/service/impl/UserServiceImpl.java index f68acc0..24930d0 100644 --- a/yami-shop-service/src/main/java/com/yami/shop/service/impl/UserServiceImpl.java +++ b/yami-shop-service/src/main/java/com/yami/shop/service/impl/UserServiceImpl.java @@ -18,6 +18,7 @@ import com.yami.shop.bean.model.User; import com.yami.shop.bean.param.UserRegisterParam; import com.yami.shop.bean.vo.UserVO; import com.yami.shop.common.exception.YamiShopBindException; +import com.yami.shop.common.util.RedisUtil; import com.yami.shop.dao.UserMapper; import com.yami.shop.service.UserService; import org.springframework.beans.factory.annotation.Autowired; @@ -26,6 +27,7 @@ import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.Date; +import java.util.Objects; import java.util.UUID; /** @@ -61,4 +63,22 @@ public class UserServiceImpl extends ServiceImpl implements Us user.setLoginPassword(uParam.getPassword()); return userMapper.insert(user) == 1; } + /** + * 看看有没有校验验证码成功的标识 + * @param userRegisterParam + * @param checkRegisterSmsFlag + */ + @Override + public void validate(UserRegisterParam userRegisterParam, String checkRegisterSmsFlag) { + if (StrUtil.isBlank(userRegisterParam.getCheckRegisterSmsFlag())) { + // 验证码已过期,请重新发送验证码校验 + throw new YamiShopBindException("验证码已过期,请重新发送验证码校验"); + } else { + String checkRegisterSmsFlagMobile = RedisUtil.get(checkRegisterSmsFlag); + if (!Objects.equals(checkRegisterSmsFlagMobile, userRegisterParam.getMobile())) { + // 验证码已过期,请重新发送验证码校验 + throw new YamiShopBindException("验证码已过期,请重新发送验证码校验"); + } + } + } }