This commit is contained in:
wangli 2026-01-23 00:17:08 +08:00
parent 463b19a049
commit 14c753af24
4 changed files with 3 additions and 73 deletions

View File

@ -14,7 +14,6 @@ import top.biwin.xinayu.common.dto.response.OrderResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* TODO

View File

@ -64,9 +64,6 @@ public class AuthService {
public LoginResponse login(LoginRequest request) {
AdminUser user = null;
// TODO: 主人这里判断使用哪种登录方式
// 根据 request 中的字段判断登录类型然后调用对应的认证方法
if (StringUtils.hasText(request.getUsername()) && StringUtils.hasText(request.getPassword())) {
// 方式1用户名 + 密码登录
user = authenticateByUsername(request.getUsername(), request.getPassword());
@ -89,10 +86,6 @@ public class AuthService {
.build();
}
// TODO: 主人这里生成 JWT Token 并构建响应
// 1. 使用 user.getUsername() 生成 accessToken refreshToken
// 2. 调用 buildLoginResponse() 方法构建包含完整用户信息的响应
// 生成 JWT Token
String accessToken = jwtUtil.generateAccessToken(user.getUsername());
String refreshToken = jwtUtil.generateRefreshToken(user.getUsername());
@ -110,12 +103,6 @@ public class AuthService {
* @return AdminUser 用户实体
*/
private AdminUser authenticateByUsername(String username, String password) {
// TODO: 主人这里使用 Spring Security AuthenticationManager 进行认证
// 步骤
// 1. 创建 UsernamePasswordAuthenticationToken
// 2. 调用 authenticationManager.authenticate(authToken)
// 3. 认证成功后从数据库查询用户信息并返回
UsernamePasswordAuthenticationToken authToken =
new UsernamePasswordAuthenticationToken(username, password);
Authentication authentication = authenticationManager.authenticate(authToken);
@ -133,15 +120,6 @@ public class AuthService {
* @return AdminUser 用户实体
*/
private AdminUser authenticateByEmail(String email, String password) {
// TODO: 主人这里验证邮箱和密码
// 步骤
// 1. 通过邮箱查询用户adminUserRepository.findByEmail(email)
// 2. 如果用户不存在抛出 BadCredentialsException
// 3. 验证密码passwordEncoder.matches(password, user.getPasswordHash())
// 4. 如果密码错误抛出 BadCredentialsException
// 5. 检查账号是否激活
// 6. 返回用户实体
AdminUser user = adminUserRepository.findByEmail(email)
.orElseThrow(() -> new BadCredentialsException("邮箱或密码错误"));
@ -166,14 +144,6 @@ public class AuthService {
* @return AdminUser 用户实体
*/
private AdminUser authenticateByEmailCode(String email, String code) {
// TODO: 主人这里验证邮箱验证码
// 步骤
// 1. 调用 emailVerificationService.verifyCode(email, code) 验证验证码
// 2. 如果验证失败抛出 BadCredentialsException
// 3. 通过邮箱查询用户
// 4. 检查账号是否激活
// 5. 返回用户实体
// 验证验证码
if (!emailVerificationService.verifyCode(email, code)) {
throw new BadCredentialsException("验证码无效或已过期");
@ -202,7 +172,6 @@ public class AuthService {
*/
private LoginResponse buildLoginResponse(AdminUser user, String accessToken,
String refreshToken, Long expiresIn) {
// TODO: 主人这里构建包含完整用户信息的响应
// user 实体的信息映射到 LoginResponse 的各个字段
LoginResponse response = new LoginResponse();

View File

@ -52,15 +52,6 @@ public class CaptchaService {
* @return CaptchaResponse 包含验证码ID和Base64图片
*/
public CaptchaResponse generateCaptcha(String sessionId) {
// TODO: 主人这里使用 Hutool 生成验证码
// 步骤
// 1. 使用 CaptchaUtil.createLineCaptcha(, , 验证码长度, 干扰线数量)
// 2. 生成唯一的 captchaId使用 UUID
// 3. 获取验证码文本captcha.getCode()
// 4. 存储验证码到内存设置过期时间
// 5. 获取Base64图片captcha.getImageBase64Data()
// 6. 返回 CaptchaResponse
// 创建线性验证码宽120高404位验证码50条干扰线
LineCaptcha captcha = CaptchaUtil.createLineCaptcha(120, 40, CAPTCHA_LENGTH, 50);
@ -93,13 +84,6 @@ public class CaptchaService {
* @return 是否验证成功
*/
public boolean verifyCaptcha(String captchaId, String userInput) {
// TODO: 主人这里验证验证码是否正确
// 步骤
// 1. captchaStore 获取验证码数据
// 2. 检查是否存在
// 3. 检查是否过期
// 4. 比较验证码不区分大小写
// 5. 验证成功后立即删除一次性使用
if (captchaId == null || userInput == null) {
log.warn("⚠️ 验证码参数为空");
@ -142,8 +126,6 @@ public class CaptchaService {
*/
@Scheduled(fixedRate = 60000)
public void cleanExpiredCaptcha() {
// TODO: 主人这里清理过期的验证码
// 遍历 captchaStore删除过期的验证码
LocalDateTime now = LocalDateTime.now();
int removedCount = 0;

View File

@ -57,15 +57,6 @@ public class EmailVerificationService {
*/
@Transactional
public void generateAndSendCode(String email) {
// TODO: 主人这里需要实现防止频繁发送的逻辑
// 步骤
// 1. 查询该邮箱最新的验证码codeRepository.findFirstByEmailOrderByCreatedAtDesc(email)
// 2. 如果存在且创建时间距今小于 resendIntervalSeconds 则抛出异常
// 3. 生成6位随机数字验证码调用 generateCode() 方法
// 4. 计算过期时间LocalDateTime.now().plusMinutes(expirationMinutes)
// 5. 创建 EmailVerificationCode 实体并保存
// 6. 调用 emailService.sendVerificationCode(email, code) 发送邮件
// 防止频繁发送
Optional<EmailVerificationCode> latestCode = codeRepository.findFirstByEmailOrderByCreatedAtDesc(email);
if (latestCode.isPresent()) {
@ -105,14 +96,7 @@ public class EmailVerificationService {
*/
@Transactional
public boolean verifyCode(String email, String code) {
// TODO: 主人这里需要验证验证码是否有效
// 步骤
// 1. 查询未使用且未过期的验证码codeRepository.findByEmailAndCodeAndIsUsedFalseAndExpiresAtAfter(...)
// 2. 如果不存在返回 false
// 3. 如果存在标记为已使用verificationCode.setIsUsed(true)
// 4. 保存codeRepository.save(verificationCode)
// 5. 返回 true
LocalDateTime now = LocalDateTime.now();
Optional<EmailVerificationCode> verificationCodeOpt =
codeRepository.findByEmailAndCodeAndIsUsedFalseAndExpiresAtAfter(email, code, now);
@ -137,9 +121,7 @@ public class EmailVerificationService {
* @return 验证码字符串
*/
private String generateCode() {
// TODO: 主人这里生成随机数字验证码
// 提示使用 StringBuilder RANDOM.nextInt(10) 生成 codeLength 位数字
StringBuilder code = new StringBuilder();
for (int i = 0; i < codeLength; i++) {
code.append(RANDOM.nextInt(10));
@ -152,9 +134,7 @@ public class EmailVerificationService {
*/
@Transactional
public void cleanupExpiredCodes() {
// TODO: 主人这里可以实现定时清理过期验证码的逻辑
// 调用codeRepository.deleteByExpiresAtBefore(LocalDateTime.now())
LocalDateTime now = LocalDateTime.now();
codeRepository.deleteByExpiresAtBefore(now);
log.info("🧹 已清理过期验证码");