AuthController.java 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package com.zsElectric.boot.auth.controller;
  2. import com.zsElectric.boot.auth.model.vo.CaptchaVO;
  3. import com.zsElectric.boot.auth.model.dto.WxMiniAppPhoneLoginDTO;
  4. import com.zsElectric.boot.auth.model.dto.WxMiniAppPhoneCodeLoginDTO;
  5. import com.zsElectric.boot.common.enums.LogModuleEnum;
  6. import com.zsElectric.boot.core.web.Result;
  7. import com.zsElectric.boot.auth.service.AuthService;
  8. import com.zsElectric.boot.auth.model.dto.WxMiniAppCodeLoginDTO;
  9. import com.zsElectric.boot.common.annotation.Log;
  10. import com.zsElectric.boot.security.model.AuthenticationToken;
  11. import io.swagger.v3.oas.annotations.Operation;
  12. import io.swagger.v3.oas.annotations.Parameter;
  13. import io.swagger.v3.oas.annotations.tags.Tag;
  14. import jakarta.validation.Valid;
  15. import lombok.RequiredArgsConstructor;
  16. import lombok.extern.slf4j.Slf4j;
  17. import org.springframework.web.bind.annotation.*;
  18. import java.util.Map;
  19. /**
  20. * 认证控制层
  21. *
  22. * @author Ray.Hao
  23. * @since 2022/10/16
  24. */
  25. @Tag(name = "01.认证中心")
  26. @RestController
  27. @RequestMapping("/api/v1/auth")
  28. @RequiredArgsConstructor
  29. @Slf4j
  30. public class AuthController {
  31. private final AuthService authService;
  32. @Operation(summary = "获取验证码")
  33. @GetMapping("/captcha")
  34. public Result<CaptchaVO> getCaptcha() {
  35. CaptchaVO captcha = authService.getCaptcha();
  36. return Result.success(captcha);
  37. }
  38. @Operation(summary = "账号密码登录")
  39. @PostMapping("/login")
  40. @Log(value = "登录", module = LogModuleEnum.LOGIN)
  41. public Result<AuthenticationToken> login(
  42. @Parameter(description = "用户名", example = "admin") @RequestParam String username,
  43. @Parameter(description = "密码", example = "123456") @RequestParam String password
  44. ) {
  45. AuthenticationToken authenticationToken = authService.login(username, password);
  46. return Result.success(authenticationToken);
  47. }
  48. @Operation(summary = "短信验证码登录")
  49. @PostMapping("/login/sms")
  50. @Log(value = "短信验证码登录", module = LogModuleEnum.LOGIN)
  51. public Result<AuthenticationToken> loginBySms(
  52. @Parameter(description = "手机号", example = "18812345678") @RequestParam String mobile,
  53. @Parameter(description = "验证码", example = "1234") @RequestParam String code
  54. ) {
  55. AuthenticationToken loginResult = authService.loginBySms(mobile, code);
  56. return Result.success(loginResult);
  57. }
  58. @Operation(summary = "发送登录短信验证码")
  59. @PostMapping("/sms/code")
  60. public Result<Void> sendLoginVerifyCode(
  61. @Parameter(description = "手机号", example = "18812345678") @RequestParam String mobile
  62. ) {
  63. authService.sendSmsLoginCode(mobile);
  64. return Result.success();
  65. }
  66. @Operation(summary = "微信授权登录(Web)")
  67. @PostMapping("/login/wechat")
  68. @Log(value = "微信登录", module = LogModuleEnum.LOGIN)
  69. public Result<AuthenticationToken> loginByWechat(
  70. @Parameter(description = "微信授权码", example = "code") @RequestParam String code
  71. ) {
  72. AuthenticationToken loginResult = authService.loginByWechat(code);
  73. return Result.success(loginResult);
  74. }
  75. @Operation(summary = "微信小程序登录(Code)")
  76. @PostMapping("/wx/miniapp/code-login")
  77. public Result<AuthenticationToken> loginByWxMiniAppCode(@RequestBody @Valid WxMiniAppCodeLoginDTO loginDTO) {
  78. AuthenticationToken token = authService.loginByWxMiniAppCode(loginDTO);
  79. return Result.success(token);
  80. }
  81. @Operation(summary = "微信小程序登录(手机号)")
  82. @PostMapping("/wx/miniapp/phone-login")
  83. public Result<AuthenticationToken> loginByWxMiniAppPhone(@RequestBody @Valid WxMiniAppPhoneLoginDTO loginDTO) {
  84. AuthenticationToken token = authService.loginByWxMiniAppPhone(loginDTO);
  85. return Result.success(token);
  86. }
  87. @Operation(summary = "微信小程序登录(手机号Code-新版)")
  88. @PostMapping("/wx/miniapp/phone-code-login")
  89. public Result<AuthenticationToken> loginByWxMiniAppPhoneCode(@RequestBody @Valid WxMiniAppPhoneCodeLoginDTO loginDTO) {
  90. log.info("收到手机号Code登录请求, code: {}, phoneCode: {}", loginDTO.getCode(), loginDTO.getPhoneCode());
  91. AuthenticationToken token = authService.loginByWxMiniAppPhoneCode(loginDTO);
  92. log.info("手机号Code登录成功");
  93. return Result.success(token);
  94. }
  95. @Operation(summary = "运营商获取token")
  96. @PostMapping("/query_token")
  97. public Result<AuthenticationToken> loginBy(@RequestBody @Valid WxMiniAppPhoneLoginDTO loginDTO) {
  98. AuthenticationToken token = authService.loginByWxMiniAppPhone(loginDTO);
  99. return Result.success(token);
  100. }
  101. @Operation(summary = "退出登录")
  102. @DeleteMapping("/logout")
  103. @Log(value = "退出登录", module = LogModuleEnum.LOGIN)
  104. public Result<?> logout() {
  105. authService.logout();
  106. return Result.success();
  107. }
  108. @Operation(summary = "刷新令牌")
  109. @PostMapping("/refresh-token")
  110. public Result<?> refreshToken(@RequestBody Map<String, String> map) {
  111. AuthenticationToken authenticationToken = authService.refreshToken(map.get("refreshToken"));
  112. return Result.success(authenticationToken);
  113. }
  114. }