package com.youlai.boot.auth.controller; import com.youlai.boot.auth.model.LoginReq; import com.youlai.boot.common.enums.ActionTypeEnum; import com.youlai.boot.common.enums.LogModuleEnum; import com.youlai.boot.common.result.Result; import com.youlai.boot.auth.service.AuthService; import com.youlai.boot.common.annotation.Log; import com.youlai.boot.framework.captcha.model.CaptchaInfo; import com.youlai.boot.framework.security.model.AuthenticationToken; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; /** * 认证控制层 * * @author Ray.Hao * @since 0.0.1 */ @Tag(name = "01.认证中心") @RestController @RequestMapping("/api/v1/auth") @RequiredArgsConstructor @Slf4j public class AuthController { private final AuthService authService; @Operation(summary = "获取验证码") @GetMapping("/captcha") public Result getCaptcha() { CaptchaInfo captcha = authService.getCaptcha(); return Result.success(captcha); } @Operation(summary = "账号密码登录") @PostMapping("/login") @Log(module = LogModuleEnum.LOGIN, value = ActionTypeEnum.LOGIN) public Result login(@RequestBody @Valid LoginReq request) { AuthenticationToken authenticationToken = authService.login(request.getUsername(), request.getPassword()); return Result.success(authenticationToken); } @Operation(summary = "短信验证码登录") @PostMapping("/login/sms") @Log(module = LogModuleEnum.LOGIN, value = ActionTypeEnum.LOGIN) public Result loginBySms( @Parameter(description = "手机号", example = "18888888888") @RequestParam String mobile, @Parameter(description = "验证码", example = "123456") @RequestParam String code ) { AuthenticationToken loginResult = authService.loginBySms(mobile, code); return Result.success(loginResult); } @Operation(summary = "发送登录短信验证码") @PostMapping("/sms/code") public Result sendSmsCode( @Parameter(description = "手机号", example = "18888888888") @RequestParam String mobile ) { authService.sendSmsCode(mobile); return Result.success(); } @Operation(summary = "退出登录") @DeleteMapping("/logout") @Log(module = LogModuleEnum.LOGIN, value = ActionTypeEnum.LOGOUT) public Result logout() { authService.logout(); return Result.success(); } @Operation(summary = "刷新令牌") @PostMapping("/refresh-token") public Result refreshToken( @Parameter(description = "刷新令牌", example = "xxx.xxx.xxx") @RequestParam String refreshToken ) { AuthenticationToken authenticationToken = authService.refreshToken(refreshToken); return Result.success(authenticationToken); } }