vue项目 后端传给base64格式图形验证码 ,前端进行解析,回显。

我们在实际项目中时在登录的时候 时常会遇到图形验证码,来进行验证用户操作。

什么是图形验证码?

图形验证码是验证码的一种,有防止黑客对某一特定注册用户用程序暴力破解私人信息、恶意破解密码、刷论坛灌水的作用。票、
图形验证码是一种区分用户是计算机还是人的公共全自动程序。验证码是现在很多网站通行的方式,由计算机生成并评判,但是只有人才能解答。

以登录功能为例,大概流程,

1前端直接调用后端接口  获取图形验证码 以及唯一标识 

2前端将后端返给的图片验证码进行解析

3输入验证 并将参数和唯一标识传给后端

完整代码:

<template>
  <div class="login" :style="{ backgroundImage: `url(${bgImg})` }">
    <div class="login-title">
      <img class="login-logo" src="@/assets/loginLogo.png" alt="" />
    </div>
    <div class="login-inpt">
      <a-input v-model="phone" placeholder="手机号" size="large">
        <a-icon slot="prefix" type="tablet" />
      </a-input>

      <a-input-password
        size="large"
        v-model="password"
        placeholder="密码"
        v-if="loginType == 1"
      >
        <a-icon slot="prefix" type="lock" />
      </a-input-password>
      <div class="login-verification">
        <a-input
          size="large"
          v-model="imgCode"
          placeholder="验证码"
          class="w200"
        >
          <a-icon slot="prefix" type="tag" />
        </a-input>

        <img
          class="code-img ml20"
          :src="'data:image/png;base64,' + imgCodeObj.codeImg"
        />
      </div>
      <a-button
        :loading="loading"
        size="large"
        type="primary"
        block
        @click="handLogin"
      >
        登录
      </a-button>
    </div>
  </div>
</template>

<script>
import bgImg from './img/login-bgc.png'
import { authenticationForm, getImgCode } from './api/api'
import { validatorPhone } from '@/assets/js/auth'
export default {
  data() {
    return {
      bgImg,
      // 图形验证码 回显
      imgCodeObj: {
        codeId: '',
        codeImg: ''
      },
      imgCode: '', // 输入框 验证码 传给后端
      phone: '', 
      password: '',
      loading: false
    }
  },
  created() {
    this.getImgCodeFn()
    localStorage.clear() // 登录前清除token  
  },
  methods: {
    // 获取图形验证码
    getImgCodeFn() {
      getImgCode().then((res) => {
        const { code, data } = res.data
        if (code == 0) {
          this.imgCodeObj = data
        }
      })
    },
    // 登录
    handLogin() {
      let isPhone = validatorPhone(this.phone)
      if (isPhone) {
          if (!this.password) {
            this.$message.error('密码不能为空')
            return
          }
          let params= {
            username: this.phone,
            password: this.password,
            codeId: this.imgCodeObj.codeId,
            imgCode: this.imgCode
          }
          this.loading = true
          authenticationForm(params).then((res) => {
            if (res.data.code == 0) {
              localStorage.setItem('token', res.data.data)
              this.$message.success('登录成功')
              this.$router.push('/')
              this.loading = false
            } else {
              this.loading = false
            }
          })
      } else {
        this.$message.error('请输入正确的手机号!')
      }
    }
  }
}
</script>

<style lang="scss" scoped>
.login {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  min-width: 1000px;
  background-color: #fff;
  background-repeat: no-repeat;
  background-size: cover;
  -webkit-background-size: cover;
  -o-background-size: cover;
  background-position: center 0;
}
.login-title {
  display: flex;
  justify-content: center;
  align-items: center;
}
.login-logo {
  width: 368px;
}
.login-tittle-name {
  width: 264px;
  height: 49px;
  font-size: 33px;
  line-height: 49px;
  text-align: left;
  font-weight: bold;
}
.login-inpt {
  padding: 58px 0 48px 0;
  width: 368px;
  height: 320px;
  display: flex;
  justify-content: space-around;
  align-items: center;
  flex-direction: column;
}
.login-code {
  width: 120px;
  margin-left: 12px;
}
.login-verification {
  width: 368px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  .code-img {
    width: 140px;
    height: 40px;
  }
}
</style>

解析图片代码:

<img
          class="code-img ml20"
          :src="'data:image/png;base64,' + imgCodeObj.codeImg"
        />

结果图片:

 

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要实现将本地图片以base64格式上传到后端,可以使用以下步骤: 1. 在Vue项目中安装mavon-editor插件,可以使用npm进行安装:`npm install mavon-editor --save` 2. 在需要使用编辑器的Vue组件中引入mavon-editor并注册组件: ```vue <template> <mavon-editor v-model="content" @imgAdd="handleImgAdd"></mavon-editor> </template> <script> import 'mavon-editor/dist/css/index.css' import MavonEditor from 'mavon-editor' export default { components: { MavonEditor }, data() { return { content: '' } }, methods: { handleImgAdd(data) { // 处理图片上传 } } } </script> ``` 3. 在handleImgAdd方法中,可以使用FormData对象将base64格式的图片数据上传到后端,代码如下: ```javascript handleImgAdd(data) { const file = data.file const reader = new FileReader() const vm = this reader.readAsDataURL(file) reader.onload = function() { const formData = new FormData() formData.append('image', this.result) axios.post('/upload-image', formData).then(response => { vm.content += '<img src="' + response.data.url + '">' }) } } ``` 上述代码中,我们使用FileReader对象将文件读取为base64格式,然后创建FormData对象,将base64数据作为参数添加到formData中。最后,使用axios库的post方法将formData发送到后端。当上传成功后,我们将回调函数中的response.data.url作为图片的src属性,插入到编辑器中。 4. 在后端接收base64格式的图片数据,并将其转换为文件保存到服务器,最后返回图片的URL地址。这一部分需要根据后端框架和语言进行实现,这里不做过多介绍。 以上就是使用mavon-editor将本地图片以base64格式上传到后端回显的步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值