抖音实战~手机号验证码一键注册登录流程(限制手机终端登录)

article/2025/9/27 10:04:26

在这里插入图片描述

在这里插入图片描述

文章目录

          • 一、手机号+验证码
          • 二、前端
            • 2.1. 点击登陆流程
            • 2.2. 点击登录源码
          • 三、后端登录
            • 3.1. 登录流程图
            • 3.2. 流程简述
            • 3.3. 手机号验证码登录流程

一、手机号+验证码

在这里插入图片描述

二、前端
2.1. 点击登陆流程
  • 1.先校验手机号是否合法?不合法,则提示“请输入正确的手机号”
  • 2.再校验是否勾选隐私协议,未勾选,则提示“请先同意《隐私及服务协议》”
  • 3.校验通过后,根据选择的登录类型进行判断,最后,则调用后端手机号验证码登录接口
  • 4.后端返回结果
    • 4.1.成功,则保存用户信息+token信息
    • 4.2.失败:则提示后端返回的提示语
2.2. 点击登录源码
			loginOrRegist() {var me = this;var mobile = me.mobile;// 提交前,手机号校验var reg = /^1[0-9]{10,10}$/;if (!mobile || !reg.test(mobile)) {uni.showToast({title: '请输入正确的手机号',icon: 'none'})return}if (!this.agree) {uni.showToast({title: '请先同意《隐私及服务协议》',icon: 'none'});return;}var serverUrl = app.globalData.serverUrl;// 手机号密码~登录/注册if (!this.logintype) {var password = me.password;if (app.isStrEmpty(password)) {uni.showToast({title: "密码不能为空",icon: "none"});return;}// uni.showLoading()// 调用后端登录注册uni.request({method: "POST",url: serverUrl + "/user/mobileAndPasswordRegistLogin",data: {"mobile": mobile,"password": password},success(result) {var status = result.data.status;// uni.hideLoading();if (status == 200) {var userInfo = result.data.data;console.log("密码->userInfo", userInfo)app.setUserInfoSession(userInfo);app.setUserSessionToken(userInfo.userToken);// 登录成功,关闭当前页// me.close();uni.reLaunch({url: "../me/me"})} else if (status != 200) {uni.showToast({title: result.data.msg,icon: "none",duration: 3000});}}});}// 手机号验证码~登录/注册if (this.logintype) {var verifyCode = me.verifyCode;console.log("verifyCode", verifyCode)if (app.isStrEmpty(verifyCode)) {uni.showToast({title: "请填写验证码",icon: "none"});return;}// 调用后端登录注册uni.request({method: "POST",url: serverUrl + "/user/login",data: {"mobile": mobile,"smsCode": verifyCode},success(result) {var status = result.data.status;// uni.hideLoading();if (status == 200) {var userInfo = result.data.data;console.log("验证码->userInfo", userInfo)app.setUserInfoSession(userInfo);app.setUserSessionToken(userInfo.userToken);// 登录成功,关闭当前页// me.close();uni.reLaunch({url: "../me/me"})} else if (status != 200) {uni.showToast({title: result.data.msg,icon: "none",duration: 3000});}}});}}
三、后端登录
3.1. 登录流程图

会话拦截限制一台手机登录(流程图)
在这里插入图片描述

3.2. 流程简述
  • 1.前端传递userId和token
  • 2.后端接收userId和token
  • 3.校验userId和token是否为空
  • 4.校验任一为空,则提示“请登录后再继续操作!”
  • 5.不为空,通过UserId从redis中获取token
  • 6.redis中的token与传参token校验是否一致
  • 7.不一致,第一台登录的会“会话失效,请重新登录!”
  • 8.一致继续操作

备注:由于登录不拦截,因此当第二台手机登录时,token会将第一台手机的登录token进行覆盖

在这里插入图片描述
在这里插入图片描述

3.3. 手机号验证码登录流程
  • 1.从redis中获得验证码进行校验是否匹配
  • 2.查询数据库,判断用户是否存在
    • 2.1 如果用户为空,表示没有注册过,则为null,需要注册信息入库
    • 2.2 如果用户不为空,表示已经注册过,继续
  • 3.如果不为空,可以继续下方业务,可以保存用户会话信息
  • 4.用户登录注册成功以后,删除redis中的短信验证码
  • 5.返回用户信息,包含token令牌
    @PostMapping("login")public GraceJSONResult login(@Valid @RequestBody RegistLoginBO registLoginBO,HttpServletRequest request) throws Exception {String mobile = registLoginBO.getMobile();String code = registLoginBO.getSmsCode();// 1. 从redis中获得验证码进行校验是否匹配String redisCode = redis.get(MOBILE_SMSCODE + ":" + mobile);if (StringUtils.isBlank(redisCode) || !redisCode.equalsIgnoreCase(code)) {return GraceJSONResult.errorCustom(ResponseStatusEnum.SMS_CODE_ERROR);}// 2. 查询数据库,判断用户是否存在Users user = userService.queryMobileIsExist(mobile);if (user == null) {// 2.1 如果用户为空,表示没有注册过,则为null,需要注册信息入库user = userService.createUser(mobile);}// 3. 如果不为空,可以继续下方业务,可以保存用户会话信息String uToken = UUID.randomUUID().toString();redis.set(REDIS_USER_TOKEN + ":" + user.getId(), uToken);// 4. 用户登录注册成功以后,删除redis中的短信验证码redis.del(MOBILE_SMSCODE + ":" + mobile);// 5. 返回用户信息,包含token令牌UsersVO usersVO = new UsersVO();BeanUtils.copyProperties(user, usersVO);usersVO.setUserToken(uToken);return GraceJSONResult.ok(usersVO);}

http://chatgpt.dhexx.cn/article/RM46RJEi.shtml

相关文章

会话——验证码注册与记住密码登录

文章目录 1、需求分析2、用户登录功能2.1、流程分析2.2、代码实现2.3、结果演示 3、登录记住密码功能3.1、流程分析3.2、代码实现3.3、结果演示 4、用户注册功能4.1、流程分析4.2、代码实现4.3、结果演示 5、注册验证码功能5.1、流程分析5.2、代码实现5.3、结果演示 1、需求分析…

关于烧写ESP8285核心板的相关事项

首先需要一个CH340的usb 转ttl 板子 然后连接到8285 脚管对应 TTL ---- 8285 VCC----VCC RXD----TX0 TXD----RX0 GND----GND 在通电之前先要把8285的GND 和io 0 连在ttl 板子的 GND上 烧写软件要设置正确否则无法启动

esp32 esp8285 wf6000OTA升级小记

近期做了3个IOT芯片的OTA升级,记录下: 最开始做完的是ESP32,升级流程也简单,初始烧录到固定区,然后OTA升级就会在user1,user2两个区内来回升,升级的文件是同一个(即同一个文件,先升级就是user1…

Ubuntu18.04 上 ESP8285 的 esp-at release_v2.2.0.0 编译环境搭建

1 环境搭建前提 1.1 安装编译 ESP-IDF 需要的软件包: sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util1.2 安装 Python 3.8 sudo apt-get install python3.8-…

探索ESP8285(3)通过EMQX服务器点亮一个LED灯

CCC_122:博客只用于学习交流,不涉及任何商业用途,如果有错误之处,欢迎指正。 在上一个博客的基础上 探索ESP8285(2)搭建Windows版MQTT服务器 我们来通过EMQX服务器点亮ESP8285模块上的LED灯。 首先查得E…

乐鑫esp8266学习rtos3.0笔记第10篇:内置仅1M的Esp8285,如何攻破最棘手的OTA问题,大大节省资源成本开发产品;

本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。 1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。 2、 Esp8266之…

晶科鑫 | 国产26MHz晶振匹配Espressif(乐鑫) ESP8285/ESP8266芯片案例

【应用】国产26MHz频率晶振应用于物联网WIFI物联网模块(串口转WiFi模块),Espressif(乐鑫) ESP8285/ESP8266芯片匹配测试OK ESP8285其实是ESP8266的升级版本,两者可以共用同一套SDK,只是ESP8285内部集成了1MB Flash&…

ESP8285烧写问题备忘

1 问题现象 ESP8285 烧写了固件,怎么都跑不起来,串口打印如下信息: ets Jan 8 2013,rst cause:2, boot mode:(3,7)load 0x4010f000, len 1384, room 16 tail 8 chksum 0xef csum 0xef csum err ets_main.c 2 问题原因 上乐鑫官网查了 ESP…

ESP8285 多个bin文件合并烧录

可通过两种方式烧录固件,一种是基于esp-idf开发时,中命令终端执行make flash命令烧录;二是使用ESPFlashDownloadTool工具。 bin文件说明 ESP8285/ESP8266的固件一般包含4个bin文件。 查看各bin文件的路径 以带OTA的固件为例,在…

ESP8285+WS2812+MAX9814制作的音乐律动氛围灯

该项目主要参考了立创EDA开源广场的项目: esp8285芯片ESP-01F模块为主控,MAX9814音频采集模块,WS2812 2020rgb灯珠,Arduino编程环境简单制作一个律动灯条。 因为正在学习硬件PCB,所以只能算是一个仿照。 硬件&#x…

探索ESP8285(2)搭建Windows版MQTT服务器

CCC_122:博客只用于学习交流,不涉及任何商业用途,如果有错误之处,欢迎指正。 MQTT服务器有多个选择,例如EMQX,Mosquitto,Apollo,以下我们选择比较简单的EMQX来搭建MQTT的服务器。 一…

峥果智能连接不到服务器,峥果浴霸 ESP8285版本 固件

ESP ZINGUO 峥果智能浴霸个人固件. 作者声明 注意: 本项目主要目的为作者本人自己学习及使用峥果智能浴霸而开发,本着开源精神及造福网友而开源,仅个人开发,可能无法做到完整的测试,所以不承担他人使用本项目照成的所有后果。 严禁…

ESP8266 简单研究 ESP8285 研究

网址: http://wiki.ai-thinker.com/esp8266 ESP8266 系列模组专题 概述 ESP8266 系列模组是深圳市安信可科技有限公司开发的一系列基于乐鑫ESP8266的超低功耗的UART-WiFi模块的模组,可以方便地进行二次开发,接入云端服务,实现…

基于RK3399ESP8285自动售货柜项目—MP08开发板端代码详解

基于RK3399&ESP8285自动售货柜项目—②MP08开发板端代码详解 本系列文章将详细讲解该基于RK3399及ESP8285自动售货柜的完整实现方法,从硬件连接到网络通信再到软件实现,本产品所用开发板为RK3399以及MP08_2019/11/03 , 如有疑问与见解,可…

ESP8285 ESP-AT编译流程和操作步骤

ESP8282ESP-AT编译流程和操作步骤 ESP8285 相当于ESP8266EX 1M SPI Flash ,他的编译工具和ESP-AT 都是跟ESP8266EX 一样的. 他的AT指令不能做OTA分区. 由于flash空间原因. 个人理解 配置好 esp8285 的编译工具链 setup-toolchain export PATH"$PATH:$HOME/xtensa-lx1…

Sipeed M1W内部esp8285固件烧录教程

Sipeed 的K210是真的香啊,但是内部的这个esp8285是做的真的不咋地。买回来之后这个8285折腾死我了,好几次固件出问题,掉固件,问了客户姐姐和群主“泽畔”大佬才解决,所以总结下。 下载固件: 首先我们需要先…

ESP8266与ESP8285开发时有什么区别

ESP8266与ESP8285开发时有什么区别 ESP8266与ESP8285开发时有什么区别烧录环节的改变编译前Makefile文件的更改 ESP8266与ESP8285开发时有什么区别 ESP8266模块在WiFi联网领域已经被广泛使用,但是ESP8266芯片是需要外挂Flash芯片的,这样就使模块不能做的…

ESP8285 sdkconfig

ESP8285与ESP8266使用同一套SDK,ESP8285内部集成了1MB或2MB的SPI FLASH,DOUT模式,所以编译和下载时需要将SPI MODE设置为DOUT模式,编译代码之前先执行make menuconfig ->Serial flasher config->Flash SPI mode->DOUT&am…

探索ESP8285(1)搭建arduino开发ESP8285环境搭建

CCC_122:博客只用于学习交流,不涉及任何商业用途,如果有错误之处,欢迎指正。 前言:ESP8285其实是ESP8266的升级版本,两者可以共用同一套SDK,只是ESP8285内部集成了1MB Flash,SPI Mod…

【开发环境准备】更新板载ESP8285固件

更新板载 ESP8285 固件 1. 简介: 目前 MaixPy 系列采用 M1W 模块的作为核心模块的开发板有: MaixDock(M1W), MaixGo 通常情况下我们不需要更新模块内部 WIFI SOC ESP8285 的固件,但是如果使用过程中存在 bug,以及有新版本的固件发布时我们就可以更新固件 MaixDock、Maix…