交友项目【手机号验证码发送】功能实现

桃扇骨 2023-10-08 23:16 122阅读 0赞

目录

1:注册登录需求分析

1.1:业务说明

1.2:需求分析

1.3:数据库表

1.4:实体类

2:发送短信验证码

2.1:登录验证码

2.2:接口说明

2.3:流程分析

2.4:代码实现

2.4.1:mock接口

2.4.2:UserController

2.4.3:UserService

2.4.4:配置文件

2.4.5:启动类


1:注册登录需求分析

1.1:业务说明

业务:

  1. 用户通过手机验证码进行登录

    82080ea8fc9d4241a6d51e02fc329d6c.png

    2.如果是第一次登录则需要完善个人信息,在上传图片时,需要对上传的图片做人像的校验,防止用户上传非人像的图片作为头像。流程完成后,则登录成功。

66d440cd05ac4eb98dbbb0da1c41f578.png

  • 已注册用户:

    • 输入手机号发送验证码
    • 输入验证码,进行比对完成登录
  • 未注册用户:

    • 输入手机号发送验证码
    • 输入验证码,进行比对,自动注册(保存用户)
    • 完善用户信息

1.2:需求分析

服务端接受客户端请求

Java代码调用第三方服务实现短信返送(发送短信需要运营资质,只能借助第三方实现)

f6d68011cf2c4458a6b3f8a7c04f331d.png

1.3:数据库表

数据库使用的mysql:

  1. CREATE TABLE `tb_user` (
  2. `id` bigint(20) NOT NULL AUTO_INCREMENT,
  3. `mobile` varchar(11) DEFAULT NULL COMMENT '手机号',
  4. `password` varchar(32) DEFAULT NULL COMMENT '密码,需要加密',
  5. `created` datetime DEFAULT NULL,
  6. `updated` datetime DEFAULT NULL,
  7. `hx_user` datetime DEFAULT NULL,
  8. `hx_password` datetime DEFAULT NULL,
  9. PRIMARY KEY (`id`),
  10. KEY `mobile` (`mobile`) USING BTREE
  11. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户表';

1.4:实体类

de4a47a43a6a4715ad96d1ad84f8b408.png

  1. package com.czxy.tanhua.entity;
  2. import com.baomidou.mybatisplus.annotation.IdType;
  3. import com.baomidou.mybatisplus.annotation.TableField;
  4. import com.baomidou.mybatisplus.annotation.TableId;
  5. import com.baomidou.mybatisplus.annotation.TableName;
  6. import lombok.Data;
  7. import lombok.EqualsAndHashCode;
  8. import java.util.Date;
  9. /**
  10. * <p>
  11. * 用户表
  12. * </p>
  13. *
  14. * @author 爱吃豆的土豆
  15. * @since 2023-03-29
  16. */
  17. @Data
  18. @EqualsAndHashCode(callSuper = false)
  19. @TableName("tb_user")
  20. public class User extends BasePojo {
  21. private static final long serialVersionUID = 1L;
  22. @TableId(value = "id", type = IdType.AUTO)
  23. private Long id;
  24. /**
  25. * 手机号
  26. */
  27. @TableField("mobile")
  28. private String mobile;
  29. /**
  30. * 密码,需要加密
  31. */
  32. @TableField("password")
  33. private String password;
  34. @TableField("created")
  35. private Date created;
  36. @TableField("updated")
  37. private Date updated;
  38. @TableField("hx_user")
  39. private String hxUser;
  40. @TableField("hx_password")
  41. private String hxPassword;
  42. }

2:发送短信验证码

2.1:登录验证码

服务端接收客户端请求

Java代码调用第三方服务实现短信返送(发送短信需要运营资质,只能借助第三方实现)

665dfe730dae421fa02d4bf3e7b6a7da.png

2.2:接口说明

57220ee9518049f1a197e41b448da45e.png

参见YAPI接口地址:http://192.168.136.160:3000/project/19/interface/api/94

2.3:流程分析

aa76b4111fd549a2b1c6eab62603eab1.png

客户端发送请求

服务端调用第三方组件发送验证码

验证码发送成功,存入redis

响应客户端,客户端跳转到输入验证码页面

2.4:代码实现

2.4.1:mock接口

地址:http://192.168.136.160:3000/project/19/interface/api/94 8e2ebbfd19914e31bbb08a19c53466f7.png

2.4.2:UserController

tanhua-app-server 工程编写com.tanhua.server.controller.UserController#loginee5ee5e4c617439db0551a2385da8fd1.png

  1. @RestController
  2. @RequestMapping("/user")
  3. public class LoginController {
  4. @Resource
  5. private UserService userService;
  6. @PostMapping("/login")
  7. public ResponseEntity loginUser(@RequestBody Map map){
  8. String phone = (String) map.get("phone");
  9. userService.loginUser(phone);
  10. return ResponseEntity.ok(null);
  11. }
  12. }

2.4.3:UserService

tanhua-app-server工程编写 com.tanhua.server.service.UserService#sendCode8e2f643c77644031a1069282bd16c16b.png

  1. package com.czxy.tanhua.service;
  2. import com.czxy.tanhua.autoconfig.template.SmsTemplate;
  3. import com.czxy.tanhua.commons.utils.JwtUtils;
  4. import com.czxy.tanhua.dubbo.api.UserApi;
  5. import com.czxy.tanhua.entity.User;
  6. import org.apache.commons.codec.digest.DigestUtils;
  7. import org.apache.commons.lang3.RandomStringUtils;
  8. import org.apache.commons.lang3.StringUtils;
  9. import org.apache.dubbo.config.annotation.DubboReference;
  10. import org.springframework.data.redis.core.StringRedisTemplate;
  11. import org.springframework.stereotype.Service;
  12. import javax.annotation.Resource;
  13. import java.time.Duration;
  14. import java.util.HashMap;
  15. import java.util.Map;
  16. /**
  17. * @Author 爱吃豆的土豆、
  18. * @Date 2023/3/30 9:55
  19. */
  20. @Service
  21. public class UserService {
  22. @Resource
  23. private SmsTemplate smsTemplate;
  24. @Resource
  25. private StringRedisTemplate stringRedisTemplate;
  26. @DubboReference
  27. private UserApi userApi;
  28. /**
  29. * 登录用户的验证码
  30. * @param phone
  31. */
  32. public void loginUser(String phone) {
  33. //随机生成验证码
  34. String code = RandomStringUtils.randomNumeric(6);
  35. //调用短信工具类
  36. smsTemplate.sendSms(phone,"",code);
  37. String key = "CHECK_CODE"+phone;
  38. //存放到redis中
  39. stringRedisTemplate.opsForValue().set(key,code,Duration.ofMinutes(5));
  40. }
  41. }

2.4.4:配置文件

tanhua-app-server 端添加配置文件application.yml

配置文件中包含短信一些配置信息,服务启动进行加载

  1. #服务端口
  2. server:
  3. port: 18080
  4. spring:
  5. servlet:
  6. multipart:
  7. max-file-size: 30MB
  8. max-request-size: 30MB
  9. application:
  10. name: tanhua-app-server
  11. redis: #redis配置
  12. host: localhost
  13. port: 6379
  14. rabbitmq:
  15. host: 192.168.136.160
  16. port: 5672
  17. username: guest
  18. password: guest
  19. cloud: #nacos配置
  20. nacos:
  21. discovery:
  22. # server-addr: localhost:8848
  23. server-addr: 192.168.136.160:8848
  24. config: # TODO 配置中心?
  25. server-addr: 192.168.136.160:8848
  26. dubbo: #dubbo配置
  27. protocol:
  28. name: dubbo
  29. port: 20880
  30. registry:
  31. address: spring-cloud://localhost
  32. consumer:
  33. check: false
  34. retries: 0
  35. application:
  36. logger: slf4j
  37. cloud:
  38. subscribed-services: tanhua-dubbo-db, tanhua-dubbo-mongo
  39. tanhua:
  40. sms:
  41. signName: 桐叔老司机
  42. templateCode: SMS_130929218
  43. accessKey: LTAI5tR6UTNzPK1F6CQoqF3X
  44. secret: REp7cA2pjU30skfqxGym4CkKDbtatJ
  45. oss:
  46. pathProtocol: https
  47. endpoint: oss-cn-shanghai.aliyuncs.com
  48. keyId: LTAI5t6JCKtfe8wXcXZjpbcV
  49. keySecret: jnbVNSsW50CJnAWfBkXDiUorLFnRaj
  50. bucketName: tudou-01
  51. dirName: avatar
  52. aip:
  53. appId: 26974300
  54. apiKey: LgQEvULCyS5nkMWMfp7Ofbzl
  55. secretKey: zVNfzu9GZYwX8lfASYEaumYU7dTqVKKi
  56. huanxin:
  57. appkey: 1181230208170312#tanhua
  58. clientId: YXA6cg-t55-3QPeMhKZWPtKXMA
  59. clientSecret: YXA6nMnWCIb3X9ANZXQQ0CoWPUtlaLE
  60. default:
  61. recommend:
  62. users: 2,3,8,10,18,20,24,29,27,32,36,37,56,64,75,88
  63. green:
  64. enable: true
  65. accessKeyID: LTAI4GKgob9vZ53k2SZdyAC7
  66. accessKeySecret: LHLBvXmILRoyw0niRSBuXBZewQ30la
  67. scenes: porn,terrorism #色情,暴力
  68. # 分布式文件系统FDFS配置
  69. fdfs:
  70. so-timeout: 1500
  71. connect-timeout: 600
  72. #缩略图生成参数
  73. thumb-image:
  74. width: 150
  75. height: 150
  76. #TrackerList参数,支持多个
  77. tracker-list: 192.168.136.160:22122
  78. web-server-url: http://192.168.136.160:8888/

2.4.5:启动类

cce793e38aec488797bd0ee1e6a100fe.png

  1. /**
  2. * @Author 爱吃豆的土豆、
  3. * @Date 2023/3/29 11:42
  4. */
  5. @SpringBootApplication
  6. @ServletComponentScan // 开启servlet组件扫描(过滤器扫描)
  7. public class AppServiceApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(AppServiceApplication.class,args);
  10. }
  11. }

发表评论

表情:
评论列表 (有 0 条评论,122人围观)

还没有评论,来说两句吧...

相关阅读