黑马瑞吉外卖之移动端验证码登录

  • 说明
  • 用qq邮箱进行验证码发送

hi,我是兰舟千帆,本次更文还是将瑞吉外卖的笔记完善一下。每一篇都写得很认真哦,希望需要的人可以得到帮助,谢谢你们的阅读。

说明

pc端的后台管理我们剩下有订单明细还没有进行开发,由于订单这边需要移动端下单后才可以看到订单,所以我们需要去先在移动端开发一些功能后,再回过头让订单这边进行一个展示。

首先移动端开发的话,我们首先遇到的应该就是登录的问题。移动端登录这边我们验证码发送的话我们这边采用qq邮箱的验证码进行登录。

既然是用户登录这里的话,其实我们还需要这样对应的数据模型。我们先看前端页面代码
这里给到的登录页面这里,其实我们可以稍微修改一下,之前这里是提示的输入的手机号码,我们这里要用qq邮箱验证登录的话,其实我们可以要求输入邮箱。

然后的话,其实自己可以找一个邮箱验证的方式,看看邮箱格式是否正确。
下面这个标准是不统一的,可以按照规则去规定这一段正则。

我们去引入数据模型。User对象。这里就不给出来了。这都是课程前给到的数据模型实体类。

我记得我后来用这个数据模型,但是发现其实这个数据模型里面的一些字段还没有用到。

不过我们需要把这样的数据模型设计出来。

用qq邮箱进行验证码发送

如何使用qq邮箱进行这样的操作呢?首先我们登录进qq邮箱点击设置,然后点到账户这里。


这里要开启,开启的话,会让你发一个提示,让你去开启这个服务,按照这个流程去做。

然后我们就会收到一个授权码,这个授权码要复制下来,我们需要去用。

我们打开我们的项目,在pom中导入这样的依赖。

  <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency>

然后我们在yml配置当中写一些信息。这些配置有好多种写法,我们这样去写就可以。

 mail:host: smtp.qq.comusername: 你的用户名,就是发送者的邮箱地址password: 你的授权码port: 587default-encoding: UTF-8properties:mail:smtp:socketFactoryClass: javax.net.ssl.SSLSocketFactory
#          开启debug以后,邮件发送过程的日志会在控制台上打印出来debug: true

这样配置好后,我们基本就可以使用了。
从这里开始,找到这个按钮绑定的方法


然后就是下面这里

在这里呢,我进行了一个判断,改变了一下。
下面这主要就是对后端返回值的进行了一个处理,发送失败和成功我们都要提示。

   getCode(){this.form.code = ''//这里改为了邮箱的正则表达验证const regex = /^([\w\.\-]+)\@(\w+)(\.([\w^\_]+)){1,2}$/;if (regex.test(this.form.phone)) {this.msgFlag = false//this.form.code = (Math.random()*1000000).toFixed(0)sendMsgApi({phone:this.form.phone}).then((res)=>{if (res.code === 1){this.$message({message: "^-^验证码已经发送,请注意查收",type: 'success'})}else {this.$message({message: "验证码发送失败,请输入正确邮箱",type: 'failed'})}});}else{this.msgFlag = true}},

所以我们要点到这个里面去看具体的请求路径。


ok,基本就是这样的一个逻辑。
那么我们就直接去后端接收处理提交过来的这些数据。这里是发送验证码,

用户输入邮箱,点击获取验证码,然后这个前端就会给后端发送请求。

public class UserController {@Autowiredprivate UserService userService;@Resourceprivate JavaMailSender javaMailSender;//我们需要用这个进行邮件发送//注意这里我们将发送者从配置文件注入进来@Value("${spring.mail.username}")private String from;@PostMapping("/sendMsg")private R_<String> sendMsg(@RequestBody User user, HttpSession session) {//        这里用qq邮箱去发送验证码
//获取到前端提交过来的qq号String phone = user.getPhone();//这里工具类判是否为空if (StringUtils.isNotEmpty(phone)) {//            这里用到生成验证码的工具类String code = ValidateCodeUtils.generateValidateCode(4).toString();//生成四位的验证码log.info("code={}", code);
//            构建一个邮件的对象SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
//          设置邮件发件者simpleMailMessage.setFrom(from);
//            设置邮件接受者simpleMailMessage.setTo(phone);
//            设置有纪念的主题simpleMailMessage.setSubject("登录验证码");
//            设置邮件的征文String text = "^-^道哥(兰舟千帆)给您的验证码为" + code + "请勿泄露";simpleMailMessage.setText(text);//将生成的验证码保存到Session
//            将我们生成的手机号和验证码放到session里面,我们后面用户填入验证码之后,我们验证的时候就从这里去取然后进行比对
//这里我们需要一个异常捕获session.setAttribute(phone, code);
//            return R_.success("手机验证码短信发送成功");try {javaMailSender.send(simpleMailMessage);return R_.success("手机验证码短信发送成功");} catch (MailException e) {e.printStackTrace();}}}return R_.error("手机验证码发送失败");}

然后这样验证码就发送完成了,验证码发送成功后,用户邮箱就会收到验证码,然后就会在前端将这个数据填入。这样就又是另外的一次请求。

然后这里又是一个按钮,同样是绑定了方法。


我们走到这个方法,这个方法里面也有一些处理逻辑。然后我们关注到这里面主要的请求方法


然后点进去这个方法

然后我们后端这样去写就好了。

 //    移动应用登录端@PostMapping("/login")
//    这里使用map来接收前端传过来的值private R_<User> login(@RequestBody Map map, HttpSession session) {log.info(map.toString());
//        使用map来接收参数,接收键值参数、
//        编写处理逻辑
//        获取到手机号
//        获取到验证码
//        从Session中获取到保存的验证码
//     将session中获取到的验证码和前端提交过来的验证码进行比较,这样就可以实现一个验证的方式
//        比对页面提交的验证码和session中
//判断当前的手机号在数据库查询是否有记录,如果没有记录,说明是一个新的用户,然后自动将这个手机号进行注册String phone = map.get("phone").toString();String code = map.get("code").toString();
//获取session中phone字段对应的验证码Object codeInSession = session.getAttribute(phone);
//        下面进行比对if (codeInSession != null && codeInSession.equals(code)) {LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
//            在表中根据号码来查询是否存在该邮箱用户userLambdaQueryWrapper.eq(User::getPhone, phone);User user = userService.getOne(userLambdaQueryWrapper);if(user == null){//判断当前手机号对应的用户是否为新用户,如果是新用户就自动完成注册user = new User();user.setPhone(phone);user.setStatus(1);userService.save(user);}
//            这里我们将user存储进去,后面各项操作,我们会用,其中拦截器那边会判断用户是否登录,所以我们将这个存储进去,session.setAttribute("user",user.getId());return R_.success(user);}return R_.error("验证失败");}

这样怎么验证码发送给已经验证登录的功能就开发完成了。

后端这里成功返回数据后,然后我们就可以跳转到主页面了。

后续待更。。

黑马瑞吉外卖之移动端验证码登录使用qq邮箱相关推荐

  1. 黑马瑞吉外卖之菜品的启售停售

    黑马瑞吉外卖值菜品的启售卖.和停售 这一部分功能是课程没有去完成的,但是其实是比较简单的,我们需要去完成菜品的启售和停售. 执行之前的项目,我们要完成的就是这里的这个售卖的状态的更改. 我们先去看一下 ...

  2. 黑马瑞吉外卖之文件上传和下载

    黑马瑞吉外卖之文件上传和下载 文件上传的前端页面我们使用到的是spring-web对上传代码的一个封装. 我们采用到一个上传的前端页面 这里采用到的前端页面主要部分就是 ---- <body&g ...

  3. 黑马瑞吉外卖项目之订单明细的查询,分页,派送功能

    黑马瑞吉外卖项目之订单明细的查询,分页,派送功能 /*** 后台管理订单信息分页查询* @param page* @param pageSize* @return*/@GetMapping(" ...

  4. 瑞吉外卖之移动端菜品数据的展示

    瑞吉外卖之移动端菜品数据的展示 界面分析 界面分析 上篇我们主要完成了了瑞吉外卖移动端界面登录的功能.完成界面登录自然要进入主界面. 我们和前面的登录界面进行衔接上. 于是我们跳转到这个界面,也就是我 ...

  5. 黑马瑞吉外卖之购物车功能开发(添加购物车和购物车数据展示)

    黑马瑞吉外卖之购物车功能 前端界面分析 后台购物车功能逻辑实现 前端界面分析 当我们点击选择规格的时候,数据参数item会传入按钮绑定的方法中 我们点击到这个按钮的时候,那么就会绑定到这个方法.这个方 ...

  6. 黑马-瑞吉外卖 day5 套餐管理+手机验证码登录

    目录 1. 套餐管理 1.1 新增套餐 1.2 套餐信息分页查询 1.3 删除套餐(可批量) 1.4 修改套餐状态(可批量) 2.手机验证码登录 2.1 短信发送 2.2 手机验证码登录 1. 套餐管 ...

  7. 黑马瑞吉外卖项目开发笔记

    目录 软件开发整体介绍 开发流程 角色分工 软件环境 瑞吉外卖项目介绍 项目介绍 产品原型展示 技术选型 功能架构 角色 开发环境搭建 数据库环境搭建 Maven环境搭建 1.直接创建maven项目( ...

  8. 黑马瑞吉外卖、菩提阁学习总结

    一.项目基础 技术选型: 用户层:H5.Vue.js.ElementUI.微信小程序 网关层:Nginx 应用层:SpringBoot.SpringMVC.SpringSession.Spring.S ...

  9. 黑马瑞吉外卖用户端顾客手机端页面展示

    八.顾客手机端页面展示 0.地址管理 需求分析: 一个用户可以有多个地址 一个用户只能设置一个默认地址 设置默认地址时,先将该用户下所有的地址都设置为不默认.再设置默认地址. 将AdressBook相 ...

最新文章

  1. JavaScript初学者编程题(7)
  2. Python代码统计工具
  3. sql必知必会样例表导入失败_记录WordPress搬家遇到的数据库导入错误问题
  4. 汇编(8086cpu): ip寄存器与指令的关系
  5. XTU -1231 人生成就 (dp + 记录最优解的个数)
  6. c++ template(10)类型函数
  7. sencha touch 入门系列 (一)sencha touch 简介
  8. 又一次寻找bug的经历...这次是 openlayers + chrome + win7
  9. 网页视频之H5+Mse
  10. 跨境网上收款 找PayPal没错(获取Client ID 和 secret)
  11. 数据中心运维管理经验39条
  12. 智能制造解决方案举例 智能制造解决方案落地实例
  13. ansys静态结构分析
  14. Android简单制作自定义圆形头像
  15. a4504光耦怎么检测好坏_怎样判断光耦的好坏
  16. recover-quack-data-structure
  17. 给了一串数字:218916754,根据下面规则可以找出扣扣号码:首先删除第一个数,紧接着将第二个数放到这串数字的末尾,再将第三个数删除,并将第四个数放到这串数字的末尾......如此循环,知道剩下最后
  18. 微信原图暴露的只能是 Exif ,你的隐私不在这!!!
  19. 港大黄凯斌:6G时代的边缘智能,香农与图灵的相遇
  20. 输入一个字符串,逆序并输出

热门文章

  1. vue-i18n及ElementUI国际化配置步骤
  2. 【再聚乌镇】百余家大数据企业齐聚,发布七大榜单两大产业地图,共览大数据产业全景!...
  3. landsat7数据预处理
  4. 李开复:如何做最好的创新
  5. R语言课上笔记(第1-4天)
  6. 用PyQt5+Caffe+Opencv搭建一个人脸识别登录界面
  7. (回溯_04)组合总和
  8. 如何用python处理excel中时间重合_python读取Excel文件中的时间,并计算时间间隔...
  9. idea 推送代码报‘error: The following untracked working tree ……’
  10. SQL基础知识整理—数据库相关基本概念