|
@@ -218,6 +218,45 @@ public class SysAuthV2ServiceImpl implements SysAuthV2Service {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 登录 (手机号码)
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public SysUserInfo loginWithPhone(SysAuthPhone sysAuthPhone) {
|
|
|
+
|
|
|
+ String phone = sysAuthPhone.getPhone();
|
|
|
+ Integer phoneAreaCode = sysAuthPhone.getPhone_area_code();
|
|
|
+ Integer phoneValidCode = sysAuthPhone.getPhone_valid_code();
|
|
|
+
|
|
|
+ // 判断是否处于登录错误的冻结状态 (2分钟内错误5次,则出现冻结提示)
|
|
|
+ countUtilV2.checkErrorStatus(redisKeyOfLoginFail, phone);
|
|
|
+
|
|
|
+ // 判断短信验证码是否正确
|
|
|
+ String redisKey = redisKeyOfLogin + "-" + phone;
|
|
|
+ Integer smsCode = redisUtil.getCacheObject(redisKey);
|
|
|
+ // 判断是否发送验证码
|
|
|
+ if ("false".equals(SMS_DEBUG) && smsCode == null) throw new CustException("请先发送验证码");
|
|
|
+ // 判断短信验证码是否错误
|
|
|
+ if ("false".equals(SMS_DEBUG) && !smsCode.equals(phoneValidCode)) loginFail("短信验证码错误", phone, true);
|
|
|
+
|
|
|
+ // 判断手机号是否存在
|
|
|
+ LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(SysUser::getPhone, phone).eq(SysUser::getPhone_area_code, phoneAreaCode);
|
|
|
+ SysUser sysUser = sysUserDao.selectOne(queryWrapper);
|
|
|
+ if (sysUser == null) {
|
|
|
+ // [登录失败] 用户不存在 (并不会销毁短信验证码)
|
|
|
+ loginFail("手机号码不存在", phone, true);
|
|
|
+ return null;
|
|
|
+ } else {
|
|
|
+ // 登录成功,销毁短信验证码
|
|
|
+ redisUtil.delete(redisKey);
|
|
|
+ // [登录成功]
|
|
|
+ return loginSuccess(sysUser.getId(), sysAuthPhone.getIs_remember());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional
|
|
|
public Map<String, Object> register(SysUserDTO sysUserDTO) {
|
|
@@ -285,43 +324,23 @@ public class SysAuthV2ServiceImpl implements SysAuthV2Service {
|
|
|
return Map.of("user_id", registerEntity.getId());
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
- * 登录 (手机号码)
|
|
|
+ * 忘记密码/重置密码
|
|
|
*/
|
|
|
@Override
|
|
|
- @Transactional
|
|
|
- public SysUserInfo loginWithPhone(SysAuthPhone sysAuthPhone) {
|
|
|
+ public Map<String, Object> forgotPassword(SysUserDTO sysUserDTO) {
|
|
|
|
|
|
- String phone = sysAuthPhone.getPhone();
|
|
|
- Integer phoneAreaCode = sysAuthPhone.getPhone_area_code();
|
|
|
- Integer phoneValidCode = sysAuthPhone.getPhone_valid_code();
|
|
|
|
|
|
- // 判断是否处于登录错误的冻结状态 (2分钟内错误5次,则出现冻结提示)
|
|
|
- countUtilV2.checkErrorStatus(redisKeyOfLoginFail, phone);
|
|
|
|
|
|
- // 判断短信验证码是否正确
|
|
|
- String redisKey = redisKeyOfLogin + "-" + phone;
|
|
|
- Integer smsCode = redisUtil.getCacheObject(redisKey);
|
|
|
- // 判断是否发送验证码
|
|
|
- if ("false".equals(SMS_DEBUG) && smsCode == null) throw new CustException("请先发送验证码");
|
|
|
- // 判断短信验证码是否错误
|
|
|
- if ("false".equals(SMS_DEBUG) && !smsCode.equals(phoneValidCode)) loginFail("短信验证码错误", phone, true);
|
|
|
+ return Map.of("user_id", sysUserDTO.getId());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- // 判断手机号是否存在
|
|
|
- LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
- queryWrapper.eq(SysUser::getPhone, phone).eq(SysUser::getPhone_area_code, phoneAreaCode);
|
|
|
- SysUser sysUser = sysUserDao.selectOne(queryWrapper);
|
|
|
- if (sysUser == null) {
|
|
|
- // [登录失败] 用户不存在 (并不会销毁短信验证码)
|
|
|
- loginFail("手机号码不存在", phone, true);
|
|
|
- return null;
|
|
|
- } else {
|
|
|
- // 登录成功,销毁短信验证码
|
|
|
- redisUtil.delete(redisKey);
|
|
|
- // [登录成功]
|
|
|
- return loginSuccess(sysUser.getId(), sysAuthPhone.getIs_remember());
|
|
|
- }
|
|
|
|
|
|
- }
|
|
|
|
|
|
}
|