package com.yunan.controller; import com.yunan.constant.ResponseCode; import com.yunan.response.ApiResponse; import com.yunan.dto.LoginDTO; import com.yunan.dto.RegisterDTO; import com.yunan.service.AuthService; import com.yunan.service.EmailService; import com.yunan.util.VerificationCodeUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.mail.MessagingException; import javax.validation.Valid; import java.io.UnsupportedEncodingException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @RestController //注解标识这是一个控制器类 @RequestMapping("/auth") @Slf4j @Api(tags = "身份验证接口") public class AuthController { @Resource private AuthService authService; @Autowired private EmailService emailService; /** * 用户登入 * @param loginDTO */ @PostMapping("/login") @ApiOperation("用户登入") public void login(@RequestBody LoginDTO loginDTO) { // authService.login(loginDTO.getUsername(), loginDTO.getPassword()); } /** * 用户注册 * @param registerDTO */ @PostMapping("/register") @ApiOperation("用户注册") public ResponseEntity register(@RequestBody @Valid RegisterDTO registerDTO) throws MessagingException, UnsupportedEncodingException { //获取发送的验证码 String rightCode = emailCodeMap.get(registerDTO.getEmail()); return authService.register(registerDTO, rightCode); } // 存储已发送的验证码 private final Map emailCodeMap = new ConcurrentHashMap<>(16); /** * 发送验证码 * @param registerDTO * @return {@link ApiResponse }<{@link String }> * @throws MessagingException */ @PostMapping("/sendEmail") @ApiOperation("邮箱验证码") public ApiResponse sendEmail(@RequestBody @Valid RegisterDTO registerDTO) throws MessagingException { // 生成验证码 String code = VerificationCodeUtils.generateCode(6); // 发送邮件 String subject = "注册验证码"; String content = "尊敬的用户,您的验证码为:" + code; emailService.sendMail(registerDTO.getEmail(), subject, content); // 保存验证码 emailCodeMap.put(registerDTO.getEmail(), code); return new ApiResponse<>(ResponseCode.SUCCESS,"验证码已发送"); } }