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

在这里插入图片描述

在这里插入图片描述

文章目录

          • 一、手机号+验证码
          • 二、前端
            • 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://www.mzph.cn/news/515421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云高级技术专家:面向5G的云网一体及云原生应用实践

7月15日,阿里云高级技术专家李晓成在2020亚太内容分发大会上发表《面向5G的云网一体及云原生应用实践》主题演讲,从边缘计算产业机遇与挑战来解读阿里云边缘计算的布局,并分享阿里云在云网一体化、边缘云原生等领域的技术实践,本文…

抖音实战~用户登出

文章目录一、前端1. 登出流程2. 流程简述3. 源码二、后端2.1. 登出逻辑2.2. 源码一、前端 1. 登出流程 2. 流程简述 1.点击登出按钮触发登出事件2.调用登出后端api3.后端返回 3.1. 成功:删除终端缓存的用户信息和token信息3.2. 失败:提示错误信息 4.跳…

无法恢复,欧洲云服务巨头数据中心起火

数据中心起火事件频频发生,这次 OVH 数据中心被大火烧毁又堪称是数据中心历史上史无前例的灾难性事件,数据中心到底该如何保护呢?作者 | 郑丽媛出品 | CSDN(ID:CSDNnews)报!请注意,你…

128核云原生新力作:Ampere® Altra® Max性能参数公布,提升50%!

安晟培半导体科技有限公司(Ampere Computing)于日前公布了云原生服务器处理器Ampere Altra Max样片的基准测试数据。Ampere Altra Max是Ampere继去年3月发布的80核Altra 处理器后即将推出的重磅新品,内核数量达到业界领先的128核,…

《从单体迈向 Serverless 的避坑指南》

简介: 用户需求和云的发展两条线推动了云原生技术的兴起、发展和大规模应用。本文将主要讨论什么是云原生应用,构成云原生应用的要素是什么,什么是 Serverless 计算,以及 Serverless 如何简化技术复杂度,帮助用户应对快…

腾讯云~Docker安装RabbitMQ

文章目录1. 测试2. 安装策略组3. 控制台1. 测试 docker run -d --name myRabbitMQ -e RABBITMQ_DEFAULT_USERimooc -e RABBITMQ_DEFAULT_PASS123456 -p 15672:15672 -p 5672:5672 rabbitmq:3.8.14-management企业内部使用参考:https://gblfy.blog.csdn.net/article…

定义下一代存储,打造全新一代数据基础设施

简介: 智能时代,阿里云正重新定义下一代存储,打造全新一代数据基础设施。在未来,数据势必呈爆发式地增长,那么对于存储的性能,必然会提出更高、更严苛的要求。此次直播阿里云将为大家带来7款存储产品新功能…

Docker私有镜像仓库是什么?

来源 | 无敌码农责编 | 寇雪芹头图 | 下载于视觉中国Docker镜像仓库概述镜像仓库作为Docker技术的核心组件之一,其主要作用就是负责镜像内容的存储和分发。Docker镜像仓库从使用范围来说分为“公有镜像仓库”和“私有镜像仓库”,公有镜像仓库是可以被任何…

《掌门1对1微服务体系 Solar | 阿里巴巴 Sentinel 落地实践》

简介: 前言 掌门1对1精耕在线教育领域,近几年业务得到了快速发展,但同时也遭遇了“成长的烦恼”。随着微服务数量不断增加,流量进一步暴增,硬件资源有点不堪重负,那么,如何实现更好的限流熔断…

腾讯云~Docker安装Redis6.2.6

文章目录1. 测试2. 安装策略组3. 远程连接1. 测试 无密码 docker run \ -d \ --name redis-my \ -v /app/redis/data:/data \ -p 16379:6379 \ redis:6.2.6有密码(推荐) docker run \ -d \ --name redis-my \ -v /app/redis/data:/data \ -p 16379:63…

中台,很多人理解的都不对

简介: 最近中台比较热,但业界内并没有对中台有统一认可清晰的定义,很多人会把中台与数据仓库、数据湖混为一谈。但需要提醒读者注意的是,数据中台并不是一个系统,它首先是一种组织架构。前言: -更多关于数智…

被“钱”困住的开源开发者们!

「Given enough eyeballs,all bugs are shallow.」(只要有足够多的眼睛,就可以让所有 Bug 浮现)1997 年,随着《大教堂与集市》的到来,开源新时代的号角正式吹响,也将 Linus 法则深深地烙印在开源…

盘点技术史:流量运营(PC 时代)

简介: 流量分析只比互联网诞生晚几年,作为一个生态,互联网需要有人提供服务,同时也需要有人消费服务,而在互联网上经营服务跟在线下经营五金店一样,如果想要成功,需要时刻关注来访问的顾客的情况…

腾讯云~Docker安装Mariadb

文章目录1. 拉取mariadb镜像2. 创建数据目录3. 创建容器4. 安全策略组5. 远程连接1. 拉取mariadb镜像 docker pull mariadb2. 创建数据目录 创建mariadb容器跟物理机上目录的映射路径,根据实际情况自定义即可 mkdir -p /app/mariadb/data3. 创建容器 docker run…

IDEA打包war包并发布到服务器上

IDEA打包war包并发布到服务器上 1、首先修改pom.xml 1、添加打包方式&#xff0c;打包成war包&#xff0c;否则打包成jar包 <packaging>war</packaging>2、在spring-boot-starter-web添加tomcat <dependency><groupId>org.springframework.boot<…

阿里云荣获可信云容器安全能力先进级认证, ACK/ACR为企业级安全护航

阿里云关注企业级用户的Kubernetes生产落地痛点&#xff0c;结合企业生产环境的大量实践&#xff0c;全面帮助企业真正落地云原生架构。安全侧问题&#xff0c;是众多大中型或金融领域企业的核心关注点。 端到端云原生安全架构 早在2018年&#xff0c;阿里云容器服务团队率先…

Kubernetes 稳定性保障手册(极简版)

作者 | 悟鹏来源 | 阿里巴巴云原生头图 | 下载于视觉中国Kubernetes 在生产环境中的采用率越来越高&#xff0c;复杂度越来越高&#xff0c;由此带来的稳定性保障的挑战越来越大。对于基于 Kubernetes 的云产品&#xff0c;稳定性保障已成为基本诉求&#xff0c;稳定性缺陷会给…

腾讯云~Docker安装Nginx

文章目录一、入门试炼1. 创建挂载目录2. 赋予目录权限3. 临时容器4. 拷贝文件5. 删除临时容器6. 自定义配置启动7. 安全策略组二、 企业内部使用2.1. nacos 集群2.2. 多个域名公用80端口是实现反向代理和负载均衡一、入门试炼 1. 创建挂载目录 mkdir /app/nginx/conf/ /app/n…

开放、普惠、高性能-SLS时序存储助力打造企业级全方位监控方案

无所不在的时序数据 时间带走一切&#xff0c;长年累月会把你的名字、外貌、性格、命运都改变。 ---柏拉图 随着时间的推移&#xff0c;万事万物都在不停的变化&#xff0c;而我们也会用各种数字去衡量这些变化信息&#xff0c;比如年龄、重量、速度、温度、金钱...在数字化时代…

一招上手!这样设计扛住亿级流量活动系统

作者 | 刘艳杰责编 | 伍杏玲出品 | CSDN云计算&#xff08;CSDNcloud)在企业里&#xff0c;做活动是一种十分常见的需求&#xff0c;有面向C端用户开展的活动&#xff0c;也有面向公司内部员工的活动。随着互联网技术的不断发展和疫情等方面的原因&#xff0c;线上开展的活动也…