旅游平台day02

news/2024/7/7 16:10:42 标签: 旅游

1. 用户注册

  • 概述:
    常见的注册方式:邮箱注册、手机号注册、昵称注册、或者以上几种同时支持
    本项目仅仅支持手机号注册

  • 需求:
    项目启动后,访问regist.html进入注册页面

手机号校验

前后台都需要对手机号进行校验

  1. 前端校验:手机号码格式校验?使用正则表达式,需要使用js对手机格式进行合法性认证,验证不通过,页面提示,通过进入下一步校验
    第一位:1开头
    第二位:3 5 7 4 9 8
    长度:11为
    必须为数字
创建一个正则表达式来校验手机号码格式通常取决于特定国家的号码规则。
以国际通用的手机号码格式为例,通常手机号码是由国家代码(可选)、一个运营商的代码,
紧随着一个特定的号码序列组成的。
例如,对于中国的手机号码,通常是以13、14、15、16、17、18或19开头的11位数字。

一个简单的正则表达式,用于校验中国的手机号码格式,可以是:

^1[3-9]\d{9}$

这个正则表达式的解释:
- `^` 表示字符串的开始。
- `1` 表示手机号码以数字1开始。
- `[3-9]` 表示第二位数字可以是3到9中的任意一个。
- `\d{9}` 表示接下来是任意9个数字(`\d` 代表任意一个数字,`{9}` 指定这样的数字有9个)。
- `$` 表示字符串的结束。

这个正则表达式仅适用于中国的手机号码格式。
如果您需要校验其他国家的手机号码格式,正则表达式可能会有所不同,
需要根据该国的手机号码规则来调整。
  1. 后端校验:唯一性校验?是否已经注册?后端提供一个接口进行手机号码校验
    这个需求前端无法实现,需要后端查询数据库进行校验。
  • 接口设计:
请求地址:/users/phone/exists
请求方式:GET
请求参数:phone=手机号
返回类型:{code:200,msg:"success",data:true or false}
  • 需求:基于手机号查询对象

  • 编码:
    controller层:
    在这里插入图片描述

    service层:在这里插入图片描述

  • 测试
    在这里插入图片描述

  • 接口联调:将后端接口与前端对接
    register.js中手机号校验代码:
    在这里插入图片描述
    需要注意跨域问题
    违背同源策略(协议、IP、端口号任意一个不同),产生跨域问题
    在这里插入图片描述

在这里插入图片描述
解决待选方案:1. 客户端代理 2. 后端允许跨域
选择方案:后端允许跨域,需要在网关配置允许跨域
回忆在springboot如何配置跨域?
在这里插入图片描述

springboot跨域配置在springcloud中能否行得通?springcloud如何配置跨域?gateway跨域配置?
官方文档寻找。
配置跨域示例:
在这里插入图片描述
在网关的配置文件中完成允许跨域配置即可:
在这里插入图片描述
跨域问题解决:
在这里插入图片描述

  • 跳转到注册页面
    输入昵称、密码、重复密码,前端对这些进行非空、两次密码一致性校验

短信验证码

当用户填写完注册信息,单击获取验证码按钮时,需要发送验证码给之前验证通过的手机号。

  1. 前端:

    • 点完获取验证码按钮后,调用后端接口实现发送短信功能
    • 发送完短信后,立即禁用发送验证码按钮,不可点击
    • 按钮文字变成倒计时,时间到了之后,再重新恢复点击按钮
  2. 后端

    • 定义发送短信接口,收到请求后,向对应手机号发送短信
      实现步骤:
      1、验证手机合法性
      2、生成验证码
      3、将验证码保存起来->如何保存验证码?存哪里?
      4、调用第三方发短信接口发送验证码->如何发?
      5、响应前端验证码发送成功

      验证码存储方案:
      业务需求:
      - 效率高
      - 时效性
      - 跨服务共享
      在这里插入图片描述
      如果是单体项目,不涉及到跨服务访问,session最佳。
      但是我们是分布式项目,涉及到跨服务访问,但是从性能角度来说,redis最合适。
      如果对数据安全性要求高,那么优先考虑mysql。

      Redis存储验证码:
      数据结构:
      String:k-v,操作简单,redis中外部key数量增加,会导致redis整体性能受到影响。
      Map:一个外部key,可以保存多个内部k-v键值对,可以避免外部key占用过多;但是会导致单个map对象数据量过大->大key,这样redis性能也会受到影响;map的时效性只能针对外部key,无法针对内部key做过期时间。
      综上分析,String结构存储验证码最合适
      key设计:唯一性、可读性、扩展性
      验证码key:用户:场景:手机号 USERS:REGISTER:VERIFY_CODE:15518497712
      验证码value:验证码的值

    接口设计:
    在这里插入图片描述
    编码:
    controller:
    在这里插入图片描述
    service:
    验证码生成方法:
    在这里插入图片描述

    发送短信整体业务:
    在这里插入图片描述
    短信服务:阿里云短信服务
    导入maven依赖
    复制示例代码
    稍微修改实例代码(access-key-id,access-key-secret)
    在这里插入图片描述

逻辑实现

细节优化

真实短信发送


http://www.niftyadmin.cn/n/5331926.html

相关文章

银行数据仓库体系实践(1)--银行数据仓库简介

银行数据仓库简介 数据仓库之父比尔(Bill Inmon)在1991年出版的“Building the Data Warehouse”(《建立数据仓库》)一书中所提出的定义被广泛接受:数据仓库(Data Warehouse)是一个面向主题的&a…

Linux 基本指令初阶

Linux 基本指令 (常用的) 一.ls 查看当前路径下的文件列表ls -a :显示目录中的所有文件ls-l :显示更多的文件属性llls -al/ls -la 显示所有的文件属性包括隐藏文件在Linux中我们将点(.)开头的文件称之为隐藏文件 ls -d 显示所在目录自己的属性二. pwd 显示当前所处的路径三…

【白话机器学习的数学】读书笔记(3)学习分类(感知机、逻辑回归)

三、学习分类 1.分类的目的 找到一条线把白点和黑点分开。这条直线是使权重向量成为法线向量的直线。(解释见下图) 直线的表达式为: ω ⋅ x ∑ i 1 n ω i ⋅ x i 0 \omegax \sum_{i1}^n\omega_i x_i 0 ω⋅xi1∑n​ωi​⋅xi​0 ω \omega ω是权重向量权…

【NewSQL】-- 分布式数据库 TiDB 和 CockroachDB

一、基本描述 1、TiDB 国产骄傲。从2015年开始,至今已8年,当前最新版本是7.5.x。TiDB 开源分布式 NewSQL 关系型数据库 是新一代开源分布式 NewSQL 数据库,模型受 Google Spanner / F1 论文的启发,实现了自动的水平伸缩&#xff…

Python程序员常用的IDE和其它开发工具

概述 “工欲善其事,必先利其器”,如果说编程是程序员的手艺,那么IDE就是程序员的吃饭家伙了。 IDE的全称是Integration Development Environment(集成开发环境),一般以代码编辑器为核心,包括一系…

pytest学习和使用-pytest如何进行分布式测试?(pytest-xdist)

1 什么是分布式测试? 在进行本文之前,先了解些基础知识,什么是分布式测试?分布式测试:是指通过局域网和Internet,把分布于不同地点、独立完成特定功能的测试计算机连接起来,以达到测试资源共享…

ubuntu18.04 安装mysql(命令)

1.安装MySQL #命令1 sudo apt-get update #命令2 sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 2.2 检查mysql服务状态 systemctl status mysql.service 3.配置远程访问 在Ubuntu下MySQL缺省是只允许本地访问的 3.1 首先用根用户进入…

RabbitMQ常见问题之延迟消息

文章目录 一、死信交换机二、TTL1. Queue指定死信交换机并设置TTL2. 消息设置TTL 三、延迟队列1. SpringAMQP创建延迟队列2. 设置消息延迟3. 测试 一、死信交换机 当一个队列中的消息满足下列情况之一时,可以成为死信(dead letter)&#xff…