diff --git a/pom.xml b/pom.xml
index 278ec98..6618ff6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -147,7 +147,11 @@
org.springframework.boot
spring-boot-starter-mail
-
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
diff --git a/src/main/java/com/bao/dating/common/aliyun/SmsUtil.java b/src/main/java/com/bao/dating/common/aliyun/SmsUtil.java
index b09f8bc..35e5afd 100644
--- a/src/main/java/com/bao/dating/common/aliyun/SmsUtil.java
+++ b/src/main/java/com/bao/dating/common/aliyun/SmsUtil.java
@@ -75,6 +75,8 @@ public class SmsUtil {
.setTemplateCode(templateCode != null ? templateCode : this.templateCode)
.setTemplateParam(templateParam);
+ log.error("TemplateParam 实际值 = {}", templateParam);
+
SendSmsResponse response = client.sendSms(sendSmsRequest);
if ("OK".equals(response.getBody().getCode())) {
@@ -145,6 +147,7 @@ public class SmsUtil {
jsonBuilder.append("}");
return sendSms(phoneNumber, templateCode, jsonBuilder.toString());
}
+
}
diff --git a/src/main/java/com/bao/dating/config/WebConfig.java b/src/main/java/com/bao/dating/config/WebConfig.java
index 98a0683..dc377a7 100644
--- a/src/main/java/com/bao/dating/config/WebConfig.java
+++ b/src/main/java/com/bao/dating/config/WebConfig.java
@@ -29,7 +29,8 @@ public class WebConfig implements WebMvcConfigurer {
.addPathPatterns("/**")
// 忽略的接口
.excludePathPatterns(
- "/user/login"
+ "/user/login",
+ "/user/sendCode"
);
}
}
diff --git a/src/main/java/com/bao/dating/controller/UserController.java b/src/main/java/com/bao/dating/controller/UserController.java
index b62cdfd..2db83e4 100644
--- a/src/main/java/com/bao/dating/controller/UserController.java
+++ b/src/main/java/com/bao/dating/controller/UserController.java
@@ -12,11 +12,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
-/**
- * 用户接口
- *
- * @author KilLze
- */
+import java.util.Map;
+
@RestController
@RequestMapping("/user")
public class UserController {
@@ -79,4 +76,18 @@ public class UserController {
UserInfoVO userInfoVO =userService.updateUserInfo(userInfoUpdateDTO);
return Result.success(ResultCode.SUCCESS, "用户信息更新成功", userInfoVO);
}
+
+ @PostMapping("/sendCode")
+ public Result sendCode(@RequestBody Map body) {
+ String phone = body.get("phone");
+ userService.sendSmsCode(phone);
+ return Result.success(ResultCode.SUCCESS, "验证码发送成功");
+ }
+
+ @PostMapping("/loginByCode")
+ public Result loginByCode(@RequestBody Map body){
+ boolean ok = userService.verifyCode(body.get("phone"), body.get("code"));
+ return ok ? Result.success(ResultCode.SUCCESS, "登录成功") : Result.error(ResultCode.SYSTEM_ERROR, "登录失败");
+ }
+
}
diff --git a/src/main/java/com/bao/dating/mapper/CommentsMapper.java b/src/main/java/com/bao/dating/mapper/CommentsMapper.java
index 1de2c6d..bea0d80 100644
--- a/src/main/java/com/bao/dating/mapper/CommentsMapper.java
+++ b/src/main/java/com/bao/dating/mapper/CommentsMapper.java
@@ -8,14 +8,14 @@ import java.util.List;
public interface CommentsMapper {
// 添加评论
- @Insert("INSERT INTO comments(content, user_id, post_id, created_at) VALUES(#{content}, #{user_id}, #{post_id}, #{created_at})")
+ @Insert("INSERT INTO dating.comments(content, user_id, post_id, created_at) VALUES(#{content}, #{user_id}, #{post_id}, #{created_at})")
int addComment(Comments comments);
// 删除评论
- @Delete("DELETE FROM comments WHERE user_id = #{user_id}")
+ @Delete("DELETE FROM dating.comments WHERE user_id = #{user_id}")
int deleteComments(@Param("user_id") Long user_id);
// 根据动态ID查询评论列表
- @Select("SELECT * FROM comments WHERE post_id = #{post_id} ORDER BY created_at DESC")
+ @Select("SELECT * FROM dating.comments WHERE post_id = #{post_id} ORDER BY created_at DESC")
List getCommentsByPostId(@Param("post_id") Long post_id);
}
diff --git a/src/main/java/com/bao/dating/service/UserService.java b/src/main/java/com/bao/dating/service/UserService.java
index 5705ceb..bfc5ee6 100644
--- a/src/main/java/com/bao/dating/service/UserService.java
+++ b/src/main/java/com/bao/dating/service/UserService.java
@@ -45,4 +45,8 @@ public interface UserService {
* @return 更新后的用户信息
*/
UserInfoVO updateUserInfo(UserInfoUpdateDTO userInfoUpdateDTO);
+
+ void sendSmsCode(String phone);
+
+ boolean verifyCode(String phone, String code);
}
diff --git a/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java b/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java
index d6b48dd..3ddff5b 100644
--- a/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/bao/dating/service/impl/UserServiceImpl.java
@@ -3,6 +3,7 @@ package com.bao.dating.service.impl;
import com.bao.dating.common.aliyun.AliOssUtil;
import com.bao.dating.common.aliyun.GreenImageScan;
import com.bao.dating.common.aliyun.GreenTextScan;
+import com.bao.dating.common.aliyun.SmsUtil;
import com.bao.dating.common.result.AliOssResult;
import com.bao.dating.common.result.GreenAuditResult;
import com.bao.dating.context.UserContext;
@@ -13,11 +14,13 @@ import com.bao.dating.pojo.entity.User;
import com.bao.dating.pojo.vo.UserInfoVO;
import com.bao.dating.pojo.vo.UserLoginVO;
import com.bao.dating.service.UserService;
+import com.bao.dating.util.CodeUtil;
import com.bao.dating.util.FileUtil;
import com.bao.dating.util.JwtUtil;
import com.bao.dating.util.MD5Util;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@@ -27,6 +30,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
+import java.util.concurrent.TimeUnit;
/**
* 用户服务实现类
@@ -36,6 +40,10 @@ import java.util.UUID;
@Service
public class UserServiceImpl implements UserService {
+
+ @Autowired
+ private SmsUtil smsUtil;
+
@Autowired
private AliOssUtil ossUtil;
@@ -48,6 +56,9 @@ public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
+ @Autowired
+ private StringRedisTemplate stringRedisTemplate;
+
/**
* 用户登录
*
@@ -275,4 +286,41 @@ public class UserServiceImpl implements UserService {
BeanUtils.copyProperties(updatedUser, userInfoVO);
return userInfoVO;
}
+
+ // 发送短信验证码
+ @Override
+ public void sendSmsCode(String phone) {
+ //防刷:60 秒内只能发一次
+ String key = "sms:code:" + phone;
+ Boolean exists = stringRedisTemplate.hasKey(key);
+ if (Boolean.TRUE.equals(exists)){
+ throw new RuntimeException("请勿频繁发送验证码");
+ }
+ // 生成验证码
+ String code = CodeUtil.generateCode();
+ // 发送短信
+ smsUtil.sendVerificationCode(phone, code);
+ //存 Redis(5分钟过期)
+ stringRedisTemplate.opsForValue()
+ .set(key,code, 5, TimeUnit.MINUTES);
+ }
+
+ // 校验验证码
+ @Override
+ public boolean verifyCode(String phone, String code) {
+
+ String key = "sms:code:" + phone;
+ String realCode = stringRedisTemplate.opsForValue().get(key);
+ //过期,未发送
+ if (realCode ==null){
+ return false;
+ }
+ //不匹配
+ if (!realCode.equals(code)){
+ return false;
+ }
+ // 校验成功,删除验证码(一次性)
+ stringRedisTemplate.delete(key);
+ return true;
+ }
}
diff --git a/src/main/java/com/bao/dating/util/CodeUtil.java b/src/main/java/com/bao/dating/util/CodeUtil.java
new file mode 100644
index 0000000..be43c7f
--- /dev/null
+++ b/src/main/java/com/bao/dating/util/CodeUtil.java
@@ -0,0 +1,12 @@
+package com.bao.dating.util;
+
+import java.util.Random;
+
+public class CodeUtil {
+ // 生成6位数字验证码
+ public static String generateCode() {
+ Random random = new Random();
+ int code=100000+random.nextInt(900000);
+ return String.valueOf(code);
+ }
+}