Browse Source

fix: 修改邮箱逻辑

dev
wangqing 4 years ago
parent
commit
c7b3ed69c6
  1. 2
      tduck-account/src/main/java/com/tduck/cloud/account/constant/AccountRedisKeyConstants.java
  2. 8
      tduck-account/src/main/java/com/tduck/cloud/account/service/UserValidateService.java
  3. 16
      tduck-account/src/main/java/com/tduck/cloud/account/service/impl/UserValidateServiceImpl.java
  4. 7
      tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserController.java

2
tduck-account/src/main/java/com/tduck/cloud/account/constant/AccountRedisKeyConstants.java

@ -30,5 +30,5 @@ public interface AccountRedisKeyConstants {
/**
* 修改邮箱验证
*/
String UPDATE_USER_EMAIL_CODE = "user:email:update:code:{}";
String UPDATE_USER_EMAIL_CODE = "user:email:update:code:{}:{}";
}

8
tduck-account/src/main/java/com/tduck/cloud/account/service/UserValidateService.java

@ -2,6 +2,7 @@ package com.tduck.cloud.account.service;
import com.tduck.cloud.account.entity.UserEntity;
import com.tduck.cloud.account.request.UpdateUserRequest;
/**
* 账号验证码
@ -37,12 +38,11 @@ public interface UserValidateService {
void sendUpdateAccountEmail(String email, Long userId);
/**
* 发送绑定账号邮箱
* 获取需要更改邮箱的UserId
*
* @param email
* @param key
* @param request
*/
Boolean checkUpdateAccountEmail(String email, String key);
Long getUpdateEmailUserId(UpdateUserRequest.Email request);
/**
* 发送短信验证码

16
tduck-account/src/main/java/com/tduck/cloud/account/service/impl/UserValidateServiceImpl.java

@ -3,10 +3,12 @@ package com.tduck.cloud.account.service.impl;
import cn.hutool.captcha.generator.RandomGenerator;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.google.common.collect.ImmutableMap;
import com.tduck.cloud.account.constant.AccountRedisKeyConstants;
import com.tduck.cloud.account.entity.UserEntity;
import com.tduck.cloud.account.request.UpdateUserRequest;
import com.tduck.cloud.account.service.UserValidateService;
import com.tduck.cloud.common.constant.CommonConstants;
import com.tduck.cloud.common.email.MailService;
@ -65,21 +67,21 @@ public class UserValidateServiceImpl implements UserValidateService {
@Override
public void sendUpdateAccountEmail(String email, Long userId) {
String code = IdUtil.fastUUID();
redisUtils.set(StrUtil.format(AccountRedisKeyConstants.UPDATE_USER_EMAIL_CODE, code), userId);
redisUtils.set(StrUtil.format(AccountRedisKeyConstants.UPDATE_USER_EMAIL_CODE, code, email), userId);
//发送邮件
Map<String, Object> params = ImmutableMap.of("updateEmailUrl", StrUtil.format(updateEmailUrl, code, email));
mailService.sendTemplateHtmlMail(email, RESET_PWD_EMAIL_TITLE, "mail/update-account-email", params);
}
@Override
public Boolean checkUpdateAccountEmail(String email, String key) {
String emailCodeKey = StrUtil.format(AccountRedisKeyConstants.UPDATE_USER_EMAIL_CODE, key);
String validateKey = redisUtils.get(emailCodeKey, String.class);
if (key.equals(validateKey)) {
public Long getUpdateEmailUserId(UpdateUserRequest.Email request) {
String emailCodeKey = StrUtil.format(AccountRedisKeyConstants.UPDATE_USER_EMAIL_CODE, request.getKey(), request.getEmail());
Long userId = redisUtils.get(emailCodeKey, Long.class);
if (ObjectUtil.isNotNull(userId)) {
redisUtils.remove(emailCodeKey);
return true;
return userId;
}
return false;
return null;
}

7
tduck-api/src/main/java/com/tduck/cloud/api/web/controller/UserController.java

@ -105,16 +105,15 @@ public class UserController {
*
* @return
*/
@Login
@PostMapping("/update/email")
public Result updateUserEmail(@RequestBody UpdateUserRequest.Email request, @RequestAttribute Long userId) {
public Result updateUserEmail(@RequestBody UpdateUserRequest.Email request) {
Validator.validateEmail(request.getEmail(), "邮箱地址不正确");
UserEntity userEntity = userService.getUserByEmail(request.getEmail());
if (ObjectUtil.isNotNull(userEntity)) {
return Result.failed("该邮箱已被绑定");
}
Boolean checkUpdateAccountEmail = userValidateService.checkUpdateAccountEmail(request.getEmail(), request.getKey());
if (!checkUpdateAccountEmail) {
Long userId = userValidateService.getUpdateEmailUserId(request);
if (ObjectUtil.isNull(userId)) {
return Result.success(false);
}
userEntity = new UserEntity();

Loading…
Cancel
Save