1.添加邮箱验证
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package vvpkassistant.User.controller;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.extra.mail.Mail;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import vvpkassistant.CoinRecords.CoinRecords;
|
||||
@@ -397,8 +398,8 @@ public class UserController {
|
||||
}
|
||||
|
||||
@PostMapping("/resendMail")
|
||||
public ResponseData<Object> resendMail(@RequestBody UserModelDTO userModelDTO){
|
||||
return ResponseData.success(mailService.resendMail(userModelDTO));
|
||||
public ResponseData<Object> resendMail(@RequestBody MailModel mailModel){
|
||||
return ResponseData.success(mailService.resendMail(mailModel));
|
||||
}
|
||||
|
||||
@GetMapping("/verificationMail")
|
||||
@@ -406,6 +407,10 @@ public class UserController {
|
||||
return ResponseData.success(userService.verificationMail(token));
|
||||
}
|
||||
|
||||
@PostMapping("/forgetMail")
|
||||
public ResponseData<Object> sendForgetPassWordMail(@RequestBody MailModel mailModel){
|
||||
return ResponseData.success(userService.sendForgetPassWordMail(mailModel));
|
||||
}
|
||||
|
||||
@GetMapping("/qrcode")
|
||||
public ResponseData<Object> generatedQrcode(){
|
||||
@@ -428,4 +433,30 @@ public class UserController {
|
||||
userService.confirm(scanInfoDTO);
|
||||
return ResponseData.success("");
|
||||
}
|
||||
|
||||
@PostMapping("/logout")
|
||||
public ResponseData<Object> logOut(@RequestBody UserModelDTO userModelDTO){
|
||||
userService.logOut(userModelDTO.getId());
|
||||
return ResponseData.success("");
|
||||
}
|
||||
|
||||
@PostMapping("/setPassword")
|
||||
public ResponseData<Object>setPassWord(@RequestBody UserModelDTO userModelDTO){
|
||||
return ResponseData.success(userService.setPassWord(userModelDTO));
|
||||
}
|
||||
|
||||
@GetMapping("/resetPassword/")
|
||||
public ResponseData<Object>resetPassWord(@RequestBody UserModelDTO userModelDTO){
|
||||
return ResponseData.success(userService.resetPassWord(userModelDTO));
|
||||
}
|
||||
|
||||
@PostMapping("/updateUserMail")
|
||||
public ResponseData<Object>updateUserMail(@RequestBody MailModel mailModel){
|
||||
return ResponseData.success(userService.updateUserMail(mailModel));
|
||||
}
|
||||
|
||||
@PostMapping("/sendUpdateMailConfirmMail")
|
||||
public ResponseData<Object>sendUpdateMailConfirmMail(@RequestBody MailModel mailModel){
|
||||
return ResponseData.success(mailService.sendUpdateConfirmMail(mailModel));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,8 @@ public class UserModelDTO {
|
||||
private Integer inviterId; // 邀请人id
|
||||
private String email;
|
||||
private String newPassword;
|
||||
private String confirmPassword;
|
||||
private String oldPassword;
|
||||
private String password;
|
||||
private String token;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import vvpkassistant.User.model.DTO.ScanInfoDTO;
|
||||
import vvpkassistant.User.model.DTO.UserModelDTO;
|
||||
import vvpkassistant.User.model.UserModel;
|
||||
import vvpkassistant.User.model.UserModelVO;
|
||||
|
||||
import vvpkassistant.mail.model.MailModel;
|
||||
|
||||
|
||||
/*
|
||||
@@ -30,4 +30,14 @@ public interface UserService extends IService<UserModel> {
|
||||
void scanQrcode(ScanInfoDTO scanInfoDTO);
|
||||
|
||||
void confirm(ScanInfoDTO scanInfoDTO);
|
||||
|
||||
void logOut(Integer id);
|
||||
|
||||
boolean setPassWord(UserModelDTO userModelDTO);
|
||||
|
||||
Object sendForgetPassWordMail(MailModel mailModel);
|
||||
|
||||
Object resetPassWord(UserModelDTO userModelDTO);
|
||||
|
||||
Boolean updateUserMail(MailModel mailModel);
|
||||
}
|
||||
|
||||
@@ -12,9 +12,11 @@ import com.github.benmanes.caffeine.cache.Caffeine;
|
||||
import com.google.zxing.WriterException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import vvpkassistant.Data.WxChatParam;
|
||||
import vvpkassistant.Tools.BcryptUtils;
|
||||
import vvpkassistant.Tools.CacheHolder;
|
||||
import vvpkassistant.Tools.QRCodeUtil;
|
||||
import vvpkassistant.Tools.VVTools;
|
||||
import vvpkassistant.User.mapper.UserDao;
|
||||
@@ -25,6 +27,7 @@ import vvpkassistant.User.model.DTO.UserModelDTO;
|
||||
import vvpkassistant.User.model.enumeration.LoginStatusEnum;
|
||||
import vvpkassistant.common.ErrorCode;
|
||||
import vvpkassistant.exception.BusinessException;
|
||||
import vvpkassistant.mail.model.MailModel;
|
||||
import vvpkassistant.mail.service.MailService;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@@ -53,6 +56,9 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserModel> implements
|
||||
.expireAfterWrite(2, TimeUnit.MINUTES)
|
||||
.build();
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public UserModelVO loginWithMail(UserModelDTO model) {
|
||||
|
||||
@@ -99,7 +105,7 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserModel> implements
|
||||
|
||||
// 用户有密码的情况下重新设置密码
|
||||
if (userInfo.getPassword() != null && userModelDTO.getOldPassword() != null) {
|
||||
if (BcryptUtils.matchPassword(userModelDTO.getOldPassword(), userInfo.getPassword())) {
|
||||
if (BcryptUtils.matchPassword(userInfo.getPassword(),userModelDTO.getOldPassword())) {
|
||||
userModelDTO.setPassword(BcryptUtils.encryptPassword(userModelDTO.getNewPassword()));
|
||||
}else {
|
||||
throw new BusinessException(ErrorCode.PASSWORD_ERROR,"旧密码不正确");
|
||||
@@ -150,6 +156,7 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserModel> implements
|
||||
userDao.updateById(oldUser);
|
||||
}
|
||||
UserModelVO userModelVO = BeanUtil.copyProperties(userModelEntity, UserModelVO.class);
|
||||
userModelVO.setHavaPassword(true);
|
||||
userModelVO.setNewAccount(true);
|
||||
userModelVO.setChatInfo(wxChatParam);
|
||||
return userModelVO;
|
||||
@@ -251,4 +258,77 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserModel> implements
|
||||
}
|
||||
log.info("-------确认登录成功uuid:{}-------", scanInfoDTO.getUuid());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logOut(Integer id) {
|
||||
StpUtil.logout(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setPassWord(UserModelDTO userModelDTO) {
|
||||
UserModel userModel = userDao.selectById(userModelDTO.getId());
|
||||
if (userModel == null) {
|
||||
throw new BusinessException(ErrorCode.USER_DOES_NOT_EXIST);
|
||||
}
|
||||
if (userModel.getPassword()!= null){
|
||||
throw new BusinessException(ErrorCode.SYSTEM_ERROR,"已设置过密码");
|
||||
}
|
||||
if (userModelDTO.getPassword().length()< 6 ){
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR,"密码长度不能小于 6 位");
|
||||
}
|
||||
if (!Objects.equals(userModelDTO.getPassword(), userModelDTO.getConfirmPassword())) {
|
||||
log.error("密码{},确认密码{}",userModelDTO.getPassword(),userModelDTO.getConfirmPassword());
|
||||
throw new BusinessException(ErrorCode.PARAMS_ERROR,"两次密码输入不一致");
|
||||
}else{
|
||||
UserModel saveEntity = BeanUtil.copyProperties(userModelDTO, UserModel.class);
|
||||
saveEntity.setPassword(BcryptUtils.encryptPassword(userModelDTO.getPassword()));
|
||||
return userDao.updateById(saveEntity) == 1 ;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object sendForgetPassWordMail(MailModel mailModel) {
|
||||
LambdaQueryWrapper<UserModel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
UserModel userModel = userDao.selectOne(lambdaQueryWrapper
|
||||
.eq(UserModel::getEmail, mailModel.getMailAddress())
|
||||
.eq(UserModel::getStatus, 0)
|
||||
.eq(UserModel::getMailVerification, 0));
|
||||
if (userModel == null) {
|
||||
throw new BusinessException(ErrorCode.USER_DOES_NOT_EXIST);
|
||||
}
|
||||
|
||||
mailService.sendForgetPassWordMail(mailModel.getMailAddress(),userModel.getId());
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object resetPassWord(UserModelDTO userModelDTO) {
|
||||
Integer i = SaTempUtil.parseToken(userModelDTO.getToken(), Integer.class);
|
||||
UserModel userModel = userDao.selectById(i);
|
||||
if (userModel == null) {
|
||||
throw new BusinessException(ErrorCode.USER_DOES_NOT_EXIST);
|
||||
}
|
||||
if (userModelDTO.getPassword().equals(userModelDTO.getConfirmPassword())) {
|
||||
UserModel updateEntity = BeanUtil.copyProperties(userModelDTO, UserModel.class);
|
||||
updateEntity.setPassword(BcryptUtils.encryptPassword(updateEntity.getPassword()));
|
||||
return userDao.updateById(updateEntity) == 1;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Boolean updateUserMail(MailModel mailModel) {
|
||||
String mail = CacheHolder.VERIFICATION_MAIL.getIfPresent(mailModel.getCode());
|
||||
if (mail != null && mail.isEmpty()) {
|
||||
throw new BusinessException(ErrorCode.SYSTEM_ERROR,"验证码过期或验证码错误");
|
||||
}
|
||||
LambdaQueryWrapper<UserModel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
UserModel userModel = userDao.selectOne(lambdaQueryWrapper
|
||||
.eq(UserModel::getEmail, mail)
|
||||
.eq(UserModel::getStatus, 0));
|
||||
userModel.setEmail(mailModel.getMailAddress());
|
||||
mailService.sendVerificationMail(mailModel.getMailAddress(),userModel.getId());
|
||||
userModel.setMailVerification(1);
|
||||
return userDao.updateById(userModel) == 1;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user