如何在springboot+vue项目中整合qq邮箱发送验证码实现登陆、注册、修改密码等功能(超简单无脑复制粘贴版)(前端部分)

633 阅读5分钟

  一、引言

前端拿到了后端给的QQ邮箱发送验证码和验证验证码的接口之后,改如何将其融入到前端项目之中呢?

本文帮助大家在前端项目中整合QQ邮箱登录、注册、找回密码等功能

如果想学习后端如何编写QQ邮箱发送验证码和验证验证码的接口,请移步上回——

如何在springboot+vue项目中整合qq邮箱发送验证码实现登陆、注册、修改密码等功能(超简单无脑复制粘贴版)(后端部分) - 掘金 (juejin.cn)

二、代码部分

1.接口封装

找到你的vue项目中管理API的部分,在你想放置封装方法的地方加入以下代码

// 枚举管理注册模块接口地址
enum API {
  // 注册接口地址
  REGISTER = '/user/register',
  GET_CODE = '/auth',
  VERIFY_CODE = '/auth',
  LOGIN = '/user/login',
  FIND_PASSWORD = '/user/changePasswordByEmail',

}
//注册函数
export const goRegister = (user: userLogin) => {
  // 直接传递 user 对象
  return request.post(API.REGISTER, user)
}
export const getCode = (email: string) => {
  return request
    .post(`${API.GET_CODE}/send-code?email=${encodeURIComponent(email)}`) // 将 email 作为查询参数
    .then((response) => response.data)
    .catch((error) => {
      console.error('获取验证码失败:', error)
      throw error // 抛出错误以便调用者处理
    })
}
export const verifyCode = (email: string, code: string) => {
  return request
    .post(
      `${API.VERIFY_CODE}/verify-code?email=${encodeURIComponent(email)}&code=${encodeURIComponent(code)}`
    ) // 将 email 作为查询参数
    .then((response) => response.data)
    .catch((error) => {
      console.error('校验验证码失败:', error)
      throw error // 抛出错误以便调用者处理
    })
}
export const goLogin = (email: string, password: string) => {
  return request.post(API.LOGIN, { email, password })
}

export const findPassword = (email: string, password: string) => {
  return request.post(API.FIND_PASSWORD, { email, password })
}

转存失败,建议直接上传图片文件

这里封装了来自后端的登录、注册、找回密码、发送验证码、验证验证码的接口,大家如果看了我的上一篇博客可以直接操作,如果没有也没关系只需要把API枚举类中的接口url改为自己后端工程的url即可

2.接口的使用

1.注册模块

在页面中的效果如下

转存失败,建议直接上传图片文件​编辑

下面是实现上述效果的html部分代码,css部分就不展示了,太多了,有需要的可以私聊我

<form class="form" v-show="register">
              <p class="heading">注册账号</p>
              <el-input
                v-model="user.email"
                style="width: 250px; height: 45px"
                placeholder="邮箱"
              />
              <div v-show="!validateEmail(user.email)" class="warning">请输入有效的邮箱格式!</div>
              <el-input v-model="code" style="width: 150px; height: 45px" placeholder="验证码" />
              <span class="space"
                ><el-button @click="toCode" color="#709DCA"  plain>获取</el-button></span
              >
              <el-input
                v-model="user.password"
                style="width: 250px; height: 45px"
                type="password"
                placeholder="密码"
                show-password
              />
              <div v-show="!validatePassword(user.password)" class="warning">
                密码至少8个字符,包含数字和特殊字符!
              </div>
              <button class="btn" @click="submitForm">立即注册</button>
              <div class="space1" @click="toLogin" color="">返回登录</div>
        </form>

转存失败,建议直接上传图片文件

下面对其中的部分方法进行解释

1)validateEmail(user.email)

代码如下

function validateEmail(email: string) {
  const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/
  if (email == '') {
    return true
  }
  return regex.test(email)
}

转存失败,建议直接上传图片文件

用来验证邮箱格式是否正确

2)validatePassword(returnPassword)

代码如下

function validatePassword(password: string) {
  const regex = /^(?=.*[0-9])(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$/
  if (password == '') {
    return true
  }
  return regex.test(password)
}

转存失败,建议直接上传图片文件

同理用来验证密码格式是否正确

3)@click="toCode"

这里是点击“获取”即会调用toCode方法

toCode方法代码如下

const toCode = () => {
  getCode(user.email)
  alert('验证码已发送')
}

转存失败,建议直接上传图片文件

用于向user.email所指向的邮箱发送验证码,getCode方法是我们在API部分封装的方法

4)@click="submitForm"

这里表示点击"立即注册"调用的方法

代码如下

async function submitForm() {
  
  if (validateEmail(user.email) && validatePassword(user.password)) {
    if (user.email == '' || user.password == '') {
      alert('邮箱和密码不能为空')
      return
    }
    const verificationResult = await verifyCode(user.email, code.value)
    if (verificationResult !== '验证码验证成功') {
      alert(verificationResult) // 显示验证码验证失败的消息
      return // 终止后续流程
    }

    try {
      // 使用 toRaw 将响应式对象转换为普通对象
      const rawUser = toRaw(user)
      await goRegister(rawUser)
      console.log(rawUser)
      alert('注册成功!')
      // 在这里清空表单
      user.email = ''
      user.password = ''
      code.value=''
    } catch (error) {
      alert('注册失败,请重试!')
    }
  } else {
    alert('邮箱或密码格式错误')
  }
}

转存失败,建议直接上传图片文件

改方法首先调用了validateEmail(user.email)和validatePassword(returnPassword)方法来验证邮箱和密码格式是否正确,若不正确便无法提交表单

之后调用verifyCode()方法用于验证验证码是否有效,改方法也是我们在API部分封装的方法

剩下的代码起到清空表单的作用,意思是注册成功之后将表单内的内容去除,更加美观

2.找回密码模块

在页面中的效果如下

转存失败,建议直接上传图片文件​编辑

同样,下面是实现上述效果的html部分代码,css部分就不展示了,太多了,有需要的可以私聊我

<form class="form" v-show="!login&&!register">
              <p class="heading">找回密码</p>
              <el-input
                v-model="user.email"
                style="width: 250px; height: 45px"
                placeholder="邮箱"
              />
              <div v-show="!validateEmail(user.email)" class="warning">请输入有效的邮箱格式!</div>
              <el-input v-model="code" style="width: 150px; height: 45px" placeholder="验证码" />
              <span class="space"
                ><el-button @click="toCode" color="#709DCA"  plain>获取</el-button></span
              >
              <el-input
                v-model="returnPassword"
                style="width: 250px; height: 45px"
                type="password"
                placeholder="新密码"
                show-password
              />
              <div v-show="!validatePassword(returnPassword)" class="warning">
                密码至少8个字符,包含数字和特殊字符!
              </div>
              <button class="btn" @click="toChange">确认修改</button>
              <div class="space1" @click="toLogin" color="">返回登录</div>
        </form>

转存失败,建议直接上传图片文件

其使用的方法和注册功能使用的方法大体一致,包括验证邮箱密码格式是否正确,发送验证码和验证验证码格式是否正确等,这里不再赘述

这里着重说明一下点击修改之后的方法 @click="toChange" ——

代码如下

async function toChange() {
  const verificationResult = await verifyCode(user.email, code.value)
  if (verificationResult !== '验证码验证成功') {
    alert(verificationResult) // 显示验证码验证失败的消息
    return // 终止后续流程
  }
  findPassword(user.email, returnPassword.value)
  alert('修改成功')
}

转存失败,建议直接上传图片文件

这里主要是调用了一个findPassword()方法这个也是我们前文在API封装的方法

三、结语

至此,前端将后端的接口融入了我们的前端项目,希望本文可以帮助到大家

如果想学习后端如何编写QQ邮箱发送验证码和验证验证码的接口,请移步上回——

如何在springboot+vue项目中整合qq邮箱发送验证码实现登陆、注册、修改密码等功能(超简单无脑复制粘贴版)(后端部分) - 掘金 (juejin.cn)