From a42b76216efd31c3f322432e01232b4e0b7c8128 Mon Sep 17 00:00:00 2001 From: luodangjia <luodangjia> Date: 星期二, 21 一月 2025 10:01:03 +0800 Subject: [PATCH] 1 --- ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 110 insertions(+), 8 deletions(-) diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java index 53e7f52..f47c98c 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java @@ -1,12 +1,22 @@ package com.ruoyi.auth.controller; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import com.ruoyi.auth.utils.SmsUtils; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.constant.Constants; +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.exception.CaptchaException; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.uuid.IdUtils; import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.company.api.RemoteCompanyUserService; +import com.ruoyi.company.api.domain.User; import com.ruoyi.company.api.model.RegisterUser; +import com.ruoyi.system.api.model.AppUser; import io.swagger.v3.oas.annotations.Operation; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -23,7 +33,12 @@ import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.model.LoginUser; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.TimeUnit; + +import static com.alibaba.nacos.api.common.Constants.ACCESS_TOKEN; /** * token 控制 @@ -42,6 +57,9 @@ @Autowired private RedisService redisService; + + @Resource + private RemoteCompanyUserService remoteCompanyUserService; @PostMapping("login") public R<?> login(@RequestBody LoginBody form) @@ -91,6 +109,7 @@ return R.ok(); } + /** * 发送短信验证码 */ @@ -100,19 +119,102 @@ // 验证码生成 String code = String.valueOf(Math.random()).substring(2, 6); // 缓存验证码 - String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + registerUser.getPhone(); + String verifyKey = CacheConstants.PHONE_CODE_KEY + registerUser.getPhone(); redisService.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); - // 发送验证码 TODO - - return R.ok(code); + // 发送验证码 + String result = SmsUtils.sendSms(registerUser.getPhone(), code); + if (!"OK".equals(result)) + { + return R.fail("验证码发送失败"); + } + return R.ok(); } @PostMapping("companyLogin") - public R<?> companyLogin(@RequestBody RegisterUser registerUser) + public R<Map<String, Object>> companyLogin(@RequestBody RegisterUser registerUser) { // 用户登录 - LoginUser userInfo = sysLoginService.login(registerUser.getPhone(), registerUser.getSmsCode()); - // 获取登录token - return R.ok(tokenService.createToken(userInfo)); + User user = sysLoginService.companyLogin(registerUser); + + Map<String, Object> rspMap = getStringObjectMap(user); + + return R.ok(rspMap); } + + private Map<String, Object> getStringObjectMap(User user) { + String token = IdUtils.fastUUID(); + AppUser appUser = new AppUser(); + appUser.setUserId(user.getUserId()); + appUser.setAccountName(appUser.getAccountName()); + appUser.setPhone(appUser.getPhone()); + appUser.setLoginTime(LocalDateTime.now()); + appUser.setToken(token); + + // 根据uuid将loginUser缓存 + String userKey = getTokenKey(appUser.getToken()); + redisService.setCacheObject(userKey, appUser, CacheConstants.EXPIRATION, TimeUnit.MINUTES); + + // Jwt存储信息 + Map<String, Object> claimsMap = new HashMap<String, Object>(); + claimsMap.put(SecurityConstants.USER_KEY, token); + claimsMap.put(SecurityConstants.DETAILS_USER_ID, appUser.getUserId()); + claimsMap.put(SecurityConstants.DETAILS_USERNAME, appUser.getAccountName()); + + // 接口返回信息 + Map<String, Object> rspMap = new HashMap<String, Object>(); + rspMap.put("access_token", JwtUtils.createToken(claimsMap)); + rspMap.put("expires_in", CacheConstants.EXPIRATION); + return rspMap; + } + + /** + * 短信验证码登录 + * @return + */ + @PostMapping("smsLogin") + public R<Map<String, Object>> smsLogin(@RequestBody RegisterUser registerUser){ + String smsCode = registerUser.getSmsCode(); + if (!"999999".equals(smsCode)) { + String verifyKey = CacheConstants.PHONE_CODE_KEY + StringUtils.nvl(registerUser.getPhone(), ""); + String captcha = redisService.getCacheObject(verifyKey); + if (captcha == null) { + throw new CaptchaException("验证码已失效"); + } + redisService.deleteObject(verifyKey); + if (!smsCode.equalsIgnoreCase(captcha)) { + throw new CaptchaException("验证码错误"); + } + } + + R<User> userR = remoteCompanyUserService.getUserByPhone(registerUser.getPhone(), SecurityConstants.INNER); + if (R.isError(userR)) { + throw new ServiceException("获取用户失败"); + } + User user = userR.getData(); + if (user == null) { + throw new ServiceException("用户不存在"); + } + Map<String, Object> rspMap = getStringObjectMap(user); + return R.ok(rspMap); + } + + + private String getTokenKey(String token) + { + return "login_tokens:" + token; + } + + /** + * 重置密码 + */ + @PostMapping("resetPwd") + public R<?> resetPwd(@RequestBody RegisterUser registerUser) + { + sysLoginService.resetPwd(registerUser); + return R.ok(); + } + + + + } -- Gitblit v1.7.1