瑞吉外卖(移动端登录)注意事项

瑞吉外卖(移动端登录)注意事项

1.ReferenceError: sendMsgApi is not defined" (found in )

写的时候出现了一个叫做Error in v-on handler: “ReferenceError: sendMsgApi is not defined” (found in )的错误

在这里插入图片描述

解决方法:清除浏览器缓存

原因:

我们之前已经运行过一次脚本了

缓存的旧脚本:浏览器可能缓存了旧的脚本文件,这些文件中可能没有定义 sendMsgApi 函数。当清除缓存后,浏览器会重新下载最新的脚本文件,其中包含了正确的 sendMsgApi 函数定义。

2.关于从后端接收验证码的这个

1…前端页面,先看页面

<div id="login" v-loading="loading">
    <div class="divHead">登录</div>
    <div class="divContainer">
        <el-input placeholder=" 请输入手机号码" v-model="form.phone"  maxlength='20'/></el-input>
        <div class="divSplit"></div>
        <el-input placeholder=" 请输入验证码" v-model="form.code"  maxlength='20'/></el-input>
        <span @click='getCode'>获取验证码</span>
    </div>
    <div class="divMsg" v-if="msgFlag">手机号输入不正确,请重新输入</div>
    <el-button type="primary" :class="{btnSubmit:1===1,btnNoPhone:!form.phone,btnPhone:form.phone}" @click="btnLogin">登录</el-button>
</div>

进入getcode

getCode(){
    this.form.code = ''
    const regex = /^(13[0-9]{9})|(15[0-9]{9})|(17[0-9]{9})|(18[0-9]{9})|(19[0-9]{9})$/;
    if (regex.test(this.form.phone)) {
        this.msgFlag = false
        sendMsgApi({phone: this.form.phone})
    }else{
        this.msgFlag = true
    }
},

注意这行代码我们是将生成的代码进行了一个封装的,而不是让前端自己直接显示在页面上

 sendMsgApi({phone: this.form.phone})

关于sendMsgApi,就是返回一个ajax请求,然后带着路径,方法,数据

function sendMsgApi(data) {
    return $axios({
        'url': '/user/sendMsg',
        'method': 'post',
        data
    })
}

还有值得注意的是这里 sessionStorage.setItem(“userPhone”,this.form.phone),这里我们只有手机号

async btnLogin(){
    if(this.form.phone && this.form.code){
        this.loading = true
        const res = await loginApi(this.form)
        this.loading = false
        if(res.code === 1){
            sessionStorage.setItem("userPhone",this.form.phone)
            window.requestAnimationFrame(()=>{
                window.location.href= '/front/index.html'
            })                           
        }else{
            this.$notify({ type:'warning', message:res.msg});
        }
    }else{
        this.$notify({ type:'warning', message:'请输入手机号码'});
    }
}

2.后端

@PostMapping("/sendMsg")
public R<String> sendMsg(@RequestBody User user, HttpSession session){
    //获取手机号
    String phone = user.getPhone();
    log.info("电话{}",phone);

    if(StringUtils.isNotEmpty(phone)){
        //生成随机的4位验证码
        String code = ValidateCodeUtils.generateValidateCode(4).toString();
        log.info("code={}",code);

        //调用阿里云提供的短信服务API完成发送短信
        //SMSUtils.sendMessage("瑞吉外卖","",phone,code);

        //需要将生成的验证码保存到Session
        session.setAttribute(phone,code);

        return R.success("手机验证码短信发送成功");
    }

    return R.error("短信发送失败");
}

3.一起把登录的代码写了

3.1看请求

前端页面点击登录然后跳转到这个方法

async btnLogin(){
    if(this.form.phone && this.form.code){  //判断一下
        this.loading = true //加载动画
        const res = await loginApi(this.form) //登录操作
        
        this.loading = false //关闭加载动画
        if(res.code === 1){  //接受到后端的响应码,判断是不是新用户
            sessionStorage.setItem("userPhone",this.form.phone) //存储
            
            window.requestAnimationFrame(()=>{
                // 使用 requestAnimationFrame 确保页面渲染完成后执行跳转
                window.location.href= '/front/index.html'
            })                           
        }else{
            this.$notify({ type:'warning', message:res.msg});
            //报错信息
        }
    }else{
        this.$notify({ type:'warning', message:'请输入手机号码'});
        //手机号有误
    }
}
function loginApi(data) {
    return $axios({
      'url': '/user/login',
      'method': 'post',
      data
    })
}

后端代码

没啥需要注意的

@PostMapping("/login")
public  R<User> login(@RequestBody Map map,HttpSession session){
    //先获取手机号
    String phone = map.get("phone").toString();


    //获取验证码
    String code1 = map.get("code").toString();

    //将code保存下来 ,然后与提交的进行对比
    Object codeSession = session.getAttribute(phone);

    if(codeSession != null && codeSession.equals(code1)){
        //比对成功就相当于是登录成功
        //查看里面user的表里面是否有这个,没有就注册一个
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getPhone,phone);
        User user = userService.getOne(queryWrapper);
        if(user == null){
            user = new User();
            user.setPhone(phone);
            user.setStatus(1);
            userService.save(user);

        }
        session.setAttribute("user",user.getId());
        return R.success(user);
    }

    return R.error("登录失败");
}
hone);
            user.setStatus(1);
            userService.save(user);

        }
        session.setAttribute("user",user.getId());
        return R.success(user);
    }

    return R.error("登录失败");
}
  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用QQ邮箱来进行黑马瑞吉外卖移动端验证码登录,您需要按照以下步骤进行操作。 首先,在黑马瑞吉外卖移动应用程序中选择使用验证码登录选项。 然后,系统会要求您输入您的手机号码。请输入与您的QQ邮箱绑定的手机号码。 接下来,系统将会向您的QQ邮箱发送一封包含验证码的电子邮件。请在移动应用程序中等待几秒钟,确保您的QQ邮箱可以收到邮件。 打开您的QQ邮箱,并查找名为“黑马瑞吉外卖验证码”的邮件。请注意,有时候邮件可能会被归类到垃圾邮件或其他文件夹中,请确保您检查所有文件夹。 在邮件中,您将找到一个验证码。将该验证码复制,并返回到黑马瑞吉外卖移动应用程序。 在应用程序中,粘贴您刚才复制的验证码,并点击“确认”按钮。 系统将根据您输入的验证码验证您的身份。如果验证码输入正确,您将成功登录黑马瑞吉外卖移动应用程序。 请注意,验证码一般在发送后几分钟内失效。如果您在一定时间内没有收到邮件或验证码已失效,请尝试重新请求或重新发送验证码。 这样,您就可以使用您的QQ邮箱来进行黑马瑞吉外卖移动端验证码登录了。如果您遇到任何问题,请及时联系黑马瑞吉外卖的客户支持。 ### 回答2: 黑马瑞吉外卖是一家提供外卖服务的公司,为了提高用户的账户安全性,他们在移动端推出了验证码登录功能。用户可以选择使用qq邮箱进行验证码登录。 用户在移动端打开黑马瑞吉外卖的应用后,选择登录界面,并选择验证码登录选项。接下来,用户需要点击“使用qq邮箱登录”的按钮。 在点击按钮后,应用会要求用户输入他们的qq邮箱地址。用户需要输入正确的邮箱地址,并点击确认。系统会验证该邮箱是否存在以及是否正确。 验证通过后,系统会向用户的qq邮箱发送一封邮件,邮件中包含一个验证码。用户需要打开邮箱,找到这封邮件,复制验证码并返回外卖应用。 用户需要粘贴该验证码,并点击确认。系统会对验证码进行验证,如果验证码正确,用户将成功登录外卖应用,并可开始使用各种功能。 通过验证码登录的方式,账户的安全性得到了提高。因为只有用户本人能够收到并使用qq邮箱中的验证码,在他人无法猜测的情况下,他人无法登录用户的账户。 同时,使用qq邮箱登录还具有方便性。许多用户已经有自己的qq邮箱,不需要再注册新的账户,可以直接使用已有的qq邮箱进行登录,省去了注册的时间和麻烦。 总之,黑马瑞吉外卖移动端验证码登录使用qq邮箱的功能保证了用户账户的安全性,同时也提供了便利的登录方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值