AuthController.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package org.ruoyi.controller;
  2. import cn.dev33.satoken.annotation.SaIgnore;
  3. import cn.hutool.core.collection.CollUtil;
  4. import cn.hutool.json.JSONUtil;
  5. import cn.hutool.json.ObjectMapper;
  6. import me.chanjar.weixin.common.error.WxErrorException;
  7. import org.ruoyi.common.core.constant.Constants;
  8. import org.ruoyi.common.core.domain.R;
  9. import org.ruoyi.common.core.domain.model.EmailLoginBody;
  10. import org.ruoyi.common.core.domain.model.LoginBody;
  11. import org.ruoyi.common.core.domain.model.RegisterBody;
  12. import org.ruoyi.common.core.domain.model.SmsLoginBody;
  13. import org.ruoyi.common.core.domain.model.VisitorLoginBody;
  14. import org.ruoyi.common.core.utils.MapstructUtils;
  15. import org.ruoyi.common.core.utils.StreamUtils;
  16. import org.ruoyi.common.core.utils.StringUtils;
  17. import org.ruoyi.common.satoken.utils.LoginHelper;
  18. import org.ruoyi.common.tenant.helper.TenantHelper;
  19. import org.ruoyi.system.domain.bo.SysTenantBo;
  20. import org.ruoyi.system.domain.vo.LoginTenantVo;
  21. import org.ruoyi.system.domain.vo.SysTenantVo;
  22. import org.ruoyi.system.domain.vo.TenantListVo;
  23. import org.ruoyi.system.service.ISysTenantService;
  24. import org.ruoyi.system.service.SysLoginService;
  25. import org.ruoyi.system.service.SysRegisterService;
  26. import org.ruoyi.system.domain.vo.LoginVo;
  27. import jakarta.servlet.http.HttpServletRequest;
  28. import lombok.RequiredArgsConstructor;
  29. import org.springframework.validation.annotation.Validated;
  30. import org.springframework.web.bind.annotation.*;
  31. import java.net.URL;
  32. import java.util.List;
  33. /**
  34. * 认证
  35. *
  36. * @author Lion Li
  37. */
  38. @SaIgnore
  39. @Validated
  40. @RequiredArgsConstructor
  41. @RestController
  42. @RequestMapping("/auth")
  43. public class AuthController {
  44. private final SysLoginService loginService;
  45. private final SysRegisterService registerService;
  46. private final ISysTenantService tenantService;
  47. @PostMapping("/xcxLogin")
  48. public R<LoginVo> login(@Validated @RequestBody String xcxCode) throws WxErrorException {
  49. String openidFromCode = loginService.getOpenidFromCode((String) JSONUtil.parseObj(xcxCode).get("xcxCode"));
  50. LoginVo loginVo = loginService.mpLogin(openidFromCode);
  51. return R.ok(loginVo);
  52. }
  53. /**
  54. * 登录方法
  55. *
  56. * @param body 登录信息
  57. * @return 结果
  58. */
  59. @PostMapping("/login")
  60. public R<LoginVo> login(@Validated @RequestBody LoginBody body) {
  61. body.setTenantId(Constants.TENANT_ID);
  62. LoginVo loginVo = new LoginVo();
  63. // 生成令牌
  64. String token = loginService.login(
  65. body.getTenantId(),
  66. body.getUsername(), body.getPassword(),
  67. body.getCode(), body.getUuid());
  68. loginVo.setToken(token);
  69. loginVo.setUserInfo(LoginHelper.getLoginUser());
  70. return R.ok(loginVo);
  71. }
  72. /**
  73. * 短信登录
  74. *
  75. * @param body 登录信息
  76. * @return 结果
  77. */
  78. @PostMapping("/smsLogin")
  79. public R<LoginVo> smsLogin(@Validated @RequestBody SmsLoginBody body) {
  80. LoginVo loginVo = new LoginVo();
  81. // 生成令牌
  82. String token = loginService.smsLogin(body.getTenantId(), body.getPhonenumber(), body.getSmsCode());
  83. loginVo.setToken(token);
  84. return R.ok(loginVo);
  85. }
  86. /**
  87. * 访客登录
  88. *
  89. * @param loginBody 登录信息
  90. * @return token信息
  91. */
  92. @PostMapping("/visitorLogin")
  93. public R<LoginVo> visitorLogin(@RequestBody VisitorLoginBody loginBody) {
  94. LoginVo loginVo = new LoginVo();
  95. return R.ok(loginVo);
  96. }
  97. /**
  98. * 邮件登录
  99. *
  100. * @param body 登录信息
  101. * @return 结果
  102. */
  103. @PostMapping("/emailLogin")
  104. public R<LoginVo> emailLogin(@Validated @RequestBody EmailLoginBody body) {
  105. LoginVo loginVo = new LoginVo();
  106. // 生成令牌
  107. String token = loginService.emailLogin(body.getTenantId(), body.getEmail(), body.getEmailCode());
  108. loginVo.setToken(token);
  109. return R.ok(loginVo);
  110. }
  111. /**
  112. * 退出登录
  113. */
  114. @PostMapping("/logout")
  115. public R<Void> logout() {
  116. loginService.logout();
  117. return R.ok("退出成功");
  118. }
  119. /**
  120. * 用户注册
  121. */
  122. @PostMapping("/register")
  123. public R<Void> register(@Validated @RequestBody RegisterBody user, HttpServletRequest request) {
  124. String domainName = request.getServerName();
  125. user.setDomainName(domainName);
  126. registerService.register(user);
  127. return R.ok();
  128. }
  129. /**
  130. * 重置密码
  131. */
  132. @PostMapping("/reset/password")
  133. @SaIgnore
  134. public R<Void> resetPassWord(@Validated @RequestBody RegisterBody user) {
  135. registerService.resetPassWord(user);
  136. return R.ok();
  137. }
  138. /**
  139. * 登录页面租户下拉框
  140. *
  141. * @return 租户列表
  142. */
  143. @GetMapping("/tenant/list")
  144. public R<LoginTenantVo> tenantList(HttpServletRequest request) throws Exception {
  145. List<SysTenantVo> tenantList = tenantService.queryList(new SysTenantBo());
  146. List<TenantListVo> voList = MapstructUtils.convert(tenantList, TenantListVo.class);
  147. // 获取域名
  148. String host = new URL(request.getRequestURL().toString()).getHost();
  149. // 根据域名进行筛选
  150. List<TenantListVo> list = StreamUtils.filter(voList, vo -> StringUtils.equals(vo.getDomain(), host));
  151. // 返回对象
  152. LoginTenantVo vo = new LoginTenantVo();
  153. vo.setVoList(CollUtil.isNotEmpty(list) ? list : voList);
  154. vo.setTenantEnabled(TenantHelper.isEnable());
  155. return R.ok(vo);
  156. }
  157. }