文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Vue怎么实现简易注册页面和发送验证码功能

2023-06-21 21:31

关注

本篇内容介绍了“Vue怎么实现简易注册页面和发送验证码功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1. 效果展示

Vue怎么实现简易注册页面和发送验证码功能

Vue怎么实现简易注册页面和发送验证码功能

2. 增强版验证码及邮件推送管理(见以后的博客)

Vue怎么实现简易注册页面和发送验证码功能

Vue怎么实现简易注册页面和发送验证码功能

3. 大致思路

用户角度分析一下注册时候的步骤:

系统设计者角度分析一下步骤:

4. 前期准备

qq邮箱中开启POP3/SMTP服务

5. 前端代码

<template>  <div class="rg_layout">    <div class="rg_left">      <p>新用户注册</p>      <p>USER REGISTER</p>    </div>    <div class="rg_center">      <div class="rg_form">        <div ></div>        <el-form ref="form" :model="form" :rules="rules" label-width="80px">          <el-form-item label="Email" prop="Email">            <el-col :span="15">              <el-input placeholder="请输入邮箱号" v-model="form.Email"></el-input>            </el-col>            <el-col :span="9">              <el-button type="success" plain @click="sendEmail">发送邮件验证</el-button>            </el-col>          </el-form-item>          <el-form-item label="用户名">            <el-col :span="20">              <el-input placeholder="请输入用户名" v-model="form.username"></el-input>            </el-col>          </el-form-item>          <el-form-item label="密码">            <el-input placeholder="请输入密码" v-model="form.password"></el-input>          </el-form-item>          <el-form-item label="性别">            <el-col :span="5">              <el-radio v-model="form.radio" label="1">男</el-radio>            </el-col>            <el-col :span="3">              <el-radio v-model="form.radio" label="2">女</el-radio>            </el-col>          </el-form-item>          <el-form-item label="出生日期">            <el-col :span="15">              <el-date-picker type="date" placeholder="选择日期" v-model="form.date" ></el-date-picker>            </el-col>          </el-form-item>          <el-form-item label="验证码">            <el-col :span="15">              <el-input                  type="text"                  placeholder="验证码将会发送到您的邮箱"                  v-model="form.text"                  oninput="value=value.replace(/\D/g,'')"                  maxlength="6"                  show-word-limit              >              </el-input>            </el-col>          </el-form-item>          <el-form-item>            <el-col :span="20">              <el-button type="primary" @click="onSubmit">立即注册</el-button>            </el-col>          </el-form-item>        </el-form>      </div>    </div>    <div class="rg_right">      <p>已有账号?        <el-link icon="el-icon-user-solid" type="primary" @click="login_asd">立刻登陆</el-link>      </p>    </div>  </div></template><script>import axios from "axios";export default {  mounted() {    this.$store.state.yesOrNo = false  },  name: "signUp",  data: function () {    return {      form: {        Email: '',        username: "",        password: "",        radio: '1',        date: '',        text: ''      },      rules: {        Email: [{required: true, message: '请输入邮箱', trigger: 'blur'}]      },      msg: ''    }  },  methods: {    login_asd(){      this.$router.replace({path: '/login'});    },    open1() {      this.$message({        showClose: true,        message: this.msg,        type: 'warning'      });    },    open2() {      this.$message({        showClose: true,        message: this.msg,        type: 'success'      });    },    open3() {      this.$message({        showClose: true,        message: this.msg,        type: 'error'      });    },    sendEmail() {      this.$refs.form.validate((valid) => {        if (valid) {          let _this = this          axios.post(this.$store.state.url+':8412/user/sendSignUpCode?email='+_this.form.Email,              ).catch(function (error) {                _this.msg = "邮箱格式不正确!"                _this.open1()          }).then(function (response) {            if (response.data.code === 200) {              _this.msg = response.data.msg              _this.open2()            } else {              _this.msg = response.data.msg              _this.open3()            }          })        }      })    },    onSubmit(){      this.$refs.form.validate((valid) => {        if (valid) {          let _this = this;          let tmp;          if(this.form.radio === "1"){            tmp = '男'          }else{            tmp = '女'          }          axios.post(this.$store.state.url+':8412/user/userSignUp?code='+_this.form.text,              {                email: this.form.Email,                username: this.form.username,                password: this.form.password,                sex: tmp,                birthday: this.form.date              }          ).catch(function (error) {            _this.msg = "邮箱格式有问题!"            _this.open1()          }).then(function (response) {            if (response.data.code === 200) {              _this.msg = response.data.msg              _this.open2()              _this.$router.replace({path: '/login'});            } else {              _this.msg = response.data.msg              _this.open3()            }          })        }      })    }  }}</script><style>* {  margin: 0px;  padding: 0px;  box-sizing: border-box;}body {  background-image: url(https://img-blog.csdnimg.cn/76110abf7fb84ee28c50bfbfa7fa8e11.jpg);  background-repeat: no-repeat;  background-size: 100%;  background-position: 0px -50px;}.rg_layout {  width: 900px;  height: 500px;  border: 5px solid #EEEEEE;  background-color: white;  opacity: 0.8;    margin: auto;  margin-top: 100px;}.rg_left {  float: left;  margin: 15px;  width: 20%;}.rg_left > p:first-child {  color: #FFD026;  font-size: 20px;}.rg_left > p:last-child {  color: #A6A6A6;}.rg_center {    float: left;  width: 450px;  }.rg_right {  float: right;  margin: 15px;}.rg_right > p:first-child {  font-size: 15px;}.rg_right p a {  color: pink;}</style>

6. 后端

使用的框架是springboot

① 主要的依赖

<!-- redis -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-redis</artifactId>            <version>2.5.2</version>        </dependency>        <!-- mail -->        <dependency>            <groupId>javax.mail</groupId>            <artifactId>mail</artifactId>            <version>1.4.7</version>        </dependency>

② 正则校验邮箱工具类

package com.example.han.util;import java.util.regex.Matcher;import java.util.regex.Pattern;public class CheckMail {    public static boolean checkMail(String mail){        Pattern pattern=Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");        //\w+@(\w+.)+[a-z]{2,3}        Matcher matcher=pattern.matcher(mail);        return matcher.matches();    }}

③ Redis的set和get工具类

package com.example.han.util;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.stereotype.Component;import java.util.concurrent.TimeUnit;@Componentpublic class RedisUtil {    @Autowired    private StringRedisTemplate stringRedisTemplate;    public void setRedisKey(String key, String value, long num) {        System.out.println("set redis start!");        stringRedisTemplate.opsForValue().set(key,value,num,TimeUnit.SECONDS);        System.out.println(stringRedisTemplate.opsForValue().get(key));    }    public String getRedisValue(String key){        if(!stringRedisTemplate.hasKey(key)){            return "None";        }        return stringRedisTemplate.opsForValue().get(key);    }}

④ 核心service层代码

    @Override    public ResultReturn checkEmailRepeat(String email) throws MyException {        if (!CheckMail.checkMail(email)) {            throw new MyException(400, "邮件格式错误");        }        if (userRepository.checkEmaillRepeated(email)) {            return ResultReturnUtil.fail(USER_EMAIL_REPEATED);        }        return ResultReturnUtil.success(USER_EMAIL_NOT_REPEATED, email);    }        @Override    public ResultReturn sendSignUpCode(String toEamil) {        //asdasd        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();        simpleMailMessage.setTo(toEamil);        simpleMailMessage.setFrom(fromEmail);        simpleMailMessage.setSubject("您的注册验证码来了");        Random r = new Random();        int rate = r.nextInt(899999) + 100000;        redisUtil.setRedisKey(toEamil + "YanZheng", rate + "", 60 * 5);    //先存入redis,key为发送的邮箱号        String content =                "你好,\n" + "\t您的验证码是:\n" + rate;        simpleMailMessage.setText(content);        try {            javaMailSender.send(simpleMailMessage);        } catch (Exception e) {            return ResultReturnUtil.fail("发送失败!");        }        return ResultReturnUtil.success("发送成功!", toEamil);    }            @Override    public ResultReturn UserSignUp(UserSignUpVO userSignUpVO, int code) throws MyException {        if (!CheckMail.checkMail(userSignUpVO.getEmail())) {    //这种是邮箱格式错误的时候            throw new MyException(400, "邮件格式错误");        }        if (userRepository.checkEmaillRepeated(userSignUpVO.getEmail())) {  //邮箱重复注册的时候            return ResultReturnUtil.fail(USER_EMAIL_REPEATED);        }        String redisCode = redisUtil.getRedisValue(userSignUpVO.getEmail() + "YanZheng");   //将code与redis的进行比对        if (!redisCode.equals("" + code)) {            return ResultReturnUtil.fail(WRONG_VERIFICATION_CODE);        }        UserDO user = new UserDO();        user.setEmail(userSignUpVO.getEmail());        user.setUsername(userSignUpVO.getUsername());        user.setPassword(userSignUpVO.getPassword());        user.setSex(userSignUpVO.getSex());        user.setBirthday(userSignUpVO.getBirthday());        if (userRepository.insertUser(user)) {            return ResultReturnUtil.success(USER_SIGNUP_SUCCESS, user.getEmail());        }        return ResultReturnUtil.fail(USER_SIGNUP_FAILED);    }

“Vue怎么实现简易注册页面和发送验证码功能”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯