|
@@ -112,6 +112,23 @@ public class SysLoginService {
|
|
|
return StpUtil.getTokenValue();
|
|
|
}
|
|
|
|
|
|
+ public String emailLogin(String tenantId, String email, String emailCode) {
|
|
|
+ // 校验租户
|
|
|
+ checkTenant(tenantId);
|
|
|
+ // 通过手机号查找用户
|
|
|
+ SysUserVo user = loadUserByEmail(tenantId, email);
|
|
|
+
|
|
|
+ checkLogin(LoginType.EMAIL, tenantId, user.getUserName(), () -> !validateEmailCode(tenantId, email, emailCode));
|
|
|
+ // 此处可根据登录用户的数据不同 自行创建 loginUser
|
|
|
+ LoginUser loginUser = buildLoginUser(user);
|
|
|
+ // 生成token
|
|
|
+ LoginHelper.loginByDevice(loginUser, DeviceType.APP);
|
|
|
+
|
|
|
+ recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
|
|
|
+ recordLoginInfo(user.getUserId());
|
|
|
+ return StpUtil.getTokenValue();
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
public String xcxLogin(String xcxCode) {
|
|
|
// xcxCode 为 小程序调用 wx.login 授权后获取
|
|
@@ -184,6 +201,18 @@ public class SysLoginService {
|
|
|
return code.equals(smsCode);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 校验邮箱验证码
|
|
|
+ */
|
|
|
+ private boolean validateEmailCode(String tenantId, String email, String emailCode) {
|
|
|
+ String code = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + email);
|
|
|
+ if (StringUtils.isBlank(code)) {
|
|
|
+ recordLogininfor(tenantId, email, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
|
|
|
+ throw new CaptchaExpireException();
|
|
|
+ }
|
|
|
+ return code.equals(emailCode);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 校验验证码
|
|
|
*
|
|
@@ -241,6 +270,24 @@ public class SysLoginService {
|
|
|
return userMapper.selectUserByPhonenumber(phonenumber);
|
|
|
}
|
|
|
|
|
|
+ private SysUserVo loadUserByEmail(String tenantId, String email) {
|
|
|
+ SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
|
|
|
+ .select(SysUser::getPhonenumber, SysUser::getStatus)
|
|
|
+ .eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId)
|
|
|
+ .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);
|
|
|
+ }
|
|
|
+ if (TenantHelper.isEnable()) {
|
|
|
+ return userMapper.selectTenantUserByEmail(email, tenantId);
|
|
|
+ }
|
|
|
+ return userMapper.selectUserByEmail(email);
|
|
|
+ }
|
|
|
+
|
|
|
private SysUserVo loadUserByOpenid(String openid) {
|
|
|
// 使用 openid 查询绑定用户 如未绑定用户 则根据业务自行处理 例如 创建默认用户
|
|
|
// todo 自行实现 userService.selectUserByOpenid(openid);
|