|
@@ -98,6 +98,20 @@ public class SysLoginService {
|
|
|
return StpUtil.getTokenValue();
|
|
|
}
|
|
|
|
|
|
+ public String emailLogin(String email, String emailCode) {
|
|
|
+ // 通过手机号查找用户
|
|
|
+ SysUser user = loadUserByEmail(email);
|
|
|
+
|
|
|
+ checkLogin(LoginType.EMAIL, user.getUserName(), () -> !validateEmailCode(email, emailCode));
|
|
|
+ // 此处可根据登录用户的数据不同 自行创建 loginUser
|
|
|
+ LoginUser loginUser = buildLoginUser(user);
|
|
|
+ // 生成token
|
|
|
+ LoginHelper.loginByDevice(loginUser, DeviceType.APP);
|
|
|
+
|
|
|
+ recordLogininfor(user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
|
|
|
+ recordLoginInfo(user.getUserId(), user.getUserName());
|
|
|
+ return StpUtil.getTokenValue();
|
|
|
+ }
|
|
|
|
|
|
public String xcxLogin(String xcxCode) {
|
|
|
// xcxCode 为 小程序调用 wx.login 授权后获取
|
|
@@ -161,6 +175,18 @@ public class SysLoginService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 校验邮箱验证码
|
|
|
+ */
|
|
|
+ private boolean validateEmailCode(String email, String emailCode) {
|
|
|
+ String code = RedisUtils.getCacheObject(CacheConstants.CAPTCHA_CODE_KEY + email);
|
|
|
+ if (StringUtils.isBlank(code)) {
|
|
|
+ recordLogininfor(email, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
|
|
|
+ throw new CaptchaExpireException();
|
|
|
+ }
|
|
|
+ return code.equals(emailCode);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 校验验证码
|
|
|
*
|
|
|
* @param username 用户名
|
|
@@ -209,6 +235,20 @@ public class SysLoginService {
|
|
|
return userMapper.selectUserByPhonenumber(phonenumber);
|
|
|
}
|
|
|
|
|
|
+ private SysUser loadUserByEmail(String email) {
|
|
|
+ SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
|
|
|
+ .select(SysUser::getPhonenumber, SysUser::getStatus)
|
|
|
+ .eq(SysUser::getEmail, email));
|
|
|
+ if (ObjectUtil.isNull(user)) {
|
|
|
+ log.info("登录用户:{} 不存在.", email);
|
|
|
+ throw new UserException("user.not.exists", email);
|
|
|
+ } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
|
|
|
+ log.info("登录用户:{} 已被停用.", email);
|
|
|
+ throw new UserException("user.blocked", email);
|
|
|
+ }
|
|
|
+ return userMapper.selectUserByEmail(email);
|
|
|
+ }
|
|
|
+
|
|
|
private SysUser loadUserByOpenid(String openid) {
|
|
|
// 使用 openid 查询绑定用户 如未绑定用户 则根据业务自行处理 例如 创建默认用户
|
|
|
// todo 自行实现 userService.selectUserByOpenid(openid);
|