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

打印 上一主题 下一主题

主题 722|帖子 722|积分 2166




文章目录



一、手机号+验证码


二、前端

2.1. 点击登陆流程



  • 1.先校验手机号是否合法?不合法,则提示“请输入正确的手机号”
  • 2.再校验是否勾选隐私协议,未勾选,则提示“请先同意《隐私及服务协议》”
  • 3.校验通过后,根据选择的登录类型进行判断,最后,则调用后端手机号验证码登录接口
  • 4.后端返回结果

    • 4.1.成功,则保存用户信息+token信息
    • 4.2.失败:则提示后端返回的提示语

2.2. 点击登录源码

  1.                         loginOrRegist() {
  2.                                 var me = this;
  3.                                 var mobile = me.mobile;
  4.                                 // 提交前,手机号校验
  5.                                 var reg = /^1[0-9]{10,10}$/;
  6.                                 if (!mobile || !reg.test(mobile)) {
  7.                                         uni.showToast({
  8.                                                 title: '请输入正确的手机号',
  9.                                                 icon: 'none'
  10.                                         })
  11.                                         return
  12.                                 }
  13.                                 if (!this.agree) {
  14.                                         uni.showToast({
  15.                                                 title: '请先同意《隐私及服务协议》',
  16.                                                 icon: 'none'
  17.                                         });
  18.                                         return;
  19.                                 }
  20.                                 var serverUrl = app.globalData.serverUrl;
  21.                                 // 手机号密码~登录/注册
  22.                                 if (!this.logintype) {
  23.                                         var password = me.password;
  24.                                         if (app.isStrEmpty(password)) {
  25.                                                 uni.showToast({
  26.                                                         title: "密码不能为空",
  27.                                                         icon: "none"
  28.                                                 });
  29.                                                 return;
  30.                                         }
  31.                                         // uni.showLoading()
  32.                                         // 调用后端登录注册
  33.                                         uni.request({
  34.                                                 method: "POST",
  35.                                                 url: serverUrl + "/user/mobileAndPasswordRegistLogin",
  36.                                                 data: {
  37.                                                         "mobile": mobile,
  38.                                                         "password": password
  39.                                                 },
  40.                                                 success(result) {
  41.                                                         var status = result.data.status;
  42.                                                         // uni.hideLoading();
  43.                                                         if (status == 200) {
  44.                                                                 var userInfo = result.data.data;
  45.                                                                 console.log("密码->userInfo", userInfo)
  46.                                                                 app.setUserInfoSession(userInfo);
  47.                                                                 app.setUserSessionToken(userInfo.userToken);
  48.                                                                 // 登录成功,关闭当前页
  49.                                                                 // me.close();
  50.                                                                 uni.reLaunch({
  51.                                                                         url: "../me/me"
  52.                                                                 })
  53.                                                         } else if (status != 200) {
  54.                                                                 uni.showToast({
  55.                                                                         title: result.data.msg,
  56.                                                                         icon: "none",
  57.                                                                         duration: 3000
  58.                                                                 });
  59.                                                         }
  60.                                                 }
  61.                                         });
  62.                                 }
  63.                                 // 手机号验证码~登录/注册
  64.                                 if (this.logintype) {
  65.                                         var verifyCode = me.verifyCode;
  66.                                         console.log("verifyCode", verifyCode)
  67.                                         if (app.isStrEmpty(verifyCode)) {
  68.                                                 uni.showToast({
  69.                                                         title: "请填写验证码",
  70.                                                         icon: "none"
  71.                                                 });
  72.                                                 return;
  73.                                         }
  74.                                         // 调用后端登录注册
  75.                                         uni.request({
  76.                                                 method: "POST",
  77.                                                 url: serverUrl + "/user/login",
  78.                                                 data: {
  79.                                                         "mobile": mobile,
  80.                                                         "smsCode": verifyCode
  81.                                                 },
  82.                                                 success(result) {
  83.                                                         var status = result.data.status;
  84.                                                         // uni.hideLoading();
  85.                                                         if (status == 200) {
  86.                                                                 var userInfo = result.data.data;
  87.                                                                 console.log("验证码->userInfo", userInfo)
  88.                                                                 app.setUserInfoSession(userInfo);
  89.                                                                 app.setUserSessionToken(userInfo.userToken);
  90.                                                                 // 登录成功,关闭当前页
  91.                                                                 // me.close();
  92.                                                                 uni.reLaunch({
  93.                                                                         url: "../me/me"
  94.                                                                 })
  95.                                                         } else if (status != 200) {
  96.                                                                 uni.showToast({
  97.                                                                         title: result.data.msg,
  98.                                                                         icon: "none",
  99.                                                                         duration: 3000
  100.                                                                 });
  101.                                                         }
  102.                                                 }
  103.                                         });
  104.                                 }
  105.                         }
复制代码
三、后端登录

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令牌
  1.     @PostMapping("login")
  2.     public GraceJSONResult login(@Valid @RequestBody RegistLoginBO registLoginBO,
  3.                                  HttpServletRequest request) throws Exception {
  4.         String mobile = registLoginBO.getMobile();
  5.         String code = registLoginBO.getSmsCode();
  6.         // 1. 从redis中获得验证码进行校验是否匹配
  7.         String redisCode = redis.get(MOBILE_SMSCODE + ":" + mobile);
  8.         if (StringUtils.isBlank(redisCode) || !redisCode.equalsIgnoreCase(code)) {
  9.             return GraceJSONResult.errorCustom(ResponseStatusEnum.SMS_CODE_ERROR);
  10.         }
  11.         // 2. 查询数据库,判断用户是否存在
  12.         Users user = userService.queryMobileIsExist(mobile);
  13.         if (user == null) {
  14.             // 2.1 如果用户为空,表示没有注册过,则为null,需要注册信息入库
  15.             user = userService.createUser(mobile);
  16.         }
  17.         // 3. 如果不为空,可以继续下方业务,可以保存用户会话信息
  18.         String uToken = UUID.randomUUID().toString();
  19.         redis.set(REDIS_USER_TOKEN + ":" + user.getId(), uToken);
  20.         // 4. 用户登录注册成功以后,删除redis中的短信验证码
  21.         redis.del(MOBILE_SMSCODE + ":" + mobile);
  22.         // 5. 返回用户信息,包含token令牌
  23.         UsersVO usersVO = new UsersVO();
  24.         BeanUtils.copyProperties(user, usersVO);
  25.         usersVO.setUserToken(uToken);
  26.         return GraceJSONResult.ok(usersVO);
  27.     }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表