当前位置:首页 > VUE

vue实现验证码

2026-02-25 14:13:47VUE

Vue 实现验证码的方法

使用 Canvas 生成图形验证码

在 Vue 项目中,可以通过 Canvas 绘制图形验证码。创建一个 Vue 组件,利用 Canvas 的 API 绘制随机字符和干扰线。

<template>
  <div>
    <canvas ref="canvas" width="120" height="40" @click="refreshCode"></canvas>
  </div>
</template>

<script>
export default {
  data() {
    return {
      code: ''
    }
  },
  mounted() {
    this.drawCode()
  },
  methods: {
    drawCode() {
      const canvas = this.$refs.canvas
      const ctx = canvas.getContext('2d')
      ctx.clearRect(0, 0, canvas.width, canvas.height)

      // 生成随机字符
      const chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
      this.code = ''
      for (let i = 0; i < 4; i++) {
        const char = chars.charAt(Math.floor(Math.random() * chars.length))
        this.code += char

        // 绘制字符
        ctx.font = '20px Arial'
        ctx.fillStyle = this.getRandomColor()
        ctx.fillText(char, 10 + i * 25, 25)
      }

      // 绘制干扰线
      for (let i = 0; i < 5; i++) {
        ctx.strokeStyle = this.getRandomColor()
        ctx.beginPath()
        ctx.moveTo(Math.random() * canvas.width, Math.random() * canvas.height)
        ctx.lineTo(Math.random() * canvas.width, Math.random() * canvas.height)
        ctx.stroke()
      }
    },
    getRandomColor() {
      return `rgb(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)})`
    },
    refreshCode() {
      this.drawCode()
    }
  }
}
</script>

使用第三方库实现验证码

对于更复杂的验证码需求,可以使用第三方库如 vue-captchav-img-code

安装 v-img-code:

vue实现验证码

npm install v-img-code --save

使用示例:

<template>
  <div>
    <v-img-code ref="imgCode" @click="refreshCode"></v-img-code>
  </div>
</template>

<script>
import VImgCode from 'v-img-code'
export default {
  components: {
    VImgCode
  },
  methods: {
    refreshCode() {
      this.$refs.imgCode.refresh()
    },
    validateCode(inputCode) {
      return this.$refs.imgCode.validate(inputCode)
    }
  }
}
</script>

短信/邮箱验证码实现

对于短信或邮箱验证码,需要配合后端服务实现。前端主要处理倒计时和验证逻辑。

vue实现验证码

<template>
  <div>
    <input v-model="phone" placeholder="请输入手机号">
    <button @click="sendCode" :disabled="counting">{{ countdownText }}</button>
    <input v-model="inputCode" placeholder="请输入验证码">
  </div>
</template>

<script>
export default {
  data() {
    return {
      phone: '',
      inputCode: '',
      counting: false,
      countdown: 60,
      timer: null
    }
  },
  computed: {
    countdownText() {
      return this.counting ? `${this.countdown}秒后重试` : '获取验证码'
    }
  },
  methods: {
    sendCode() {
      if (!this.phone) {
        alert('请输入手机号')
        return
      }

      // 调用API发送验证码
      this.$axios.post('/api/send-code', { phone: this.phone })
        .then(() => {
          this.startCountdown()
        })
        .catch(error => {
          console.error(error)
        })
    },
    startCountdown() {
      this.counting = true
      this.timer = setInterval(() => {
        if (this.countdown <= 0) {
          clearInterval(this.timer)
          this.counting = false
          this.countdown = 60
        } else {
          this.countdown--
        }
      }, 1000)
    },
    validateCode() {
      // 调用API验证验证码
      return this.$axios.post('/api/verify-code', {
        phone: this.phone,
        code: this.inputCode
      })
    }
  }
}
</script>

滑动验证码实现

对于滑动验证码,可以使用 vue-drag-verify 等第三方组件。

安装:

npm install vue-drag-verify --save

使用示例:

<template>
  <div>
    <vue-drag-verify
      ref="dragVerify"
      :isPassing.sync="isPassing"
      text="请按住滑块拖动"
      successText="验证通过"
      handlerIcon="el-icon-d-arrow-right"
      successIcon="el-icon-circle-check"
      @passcallback="handlePass"
    ></vue-drag-verify>
  </div>
</template>

<script>
import VueDragVerify from 'vue-drag-verify'
export default {
  components: {
    VueDragVerify
  },
  data() {
    return {
      isPassing: false
    }
  },
  methods: {
    handlePass() {
      // 验证通过后的逻辑
    },
    reset() {
      this.$refs.dragVerify.reset()
    }
  }
}
</script>

这些方法涵盖了 Vue 中常见的验证码实现方式,可以根据项目需求选择合适的方式。图形验证码适合防止自动化脚本,短信/邮箱验证码适合用户身份验证,滑动验证码则提供了更好的用户体验。

标签: 验证码vue
分享给朋友:

相关文章

vue实现粘贴

vue实现粘贴

Vue 实现粘贴功能的方法 在 Vue 中实现粘贴功能通常涉及监听粘贴事件并处理剪贴板数据。以下是几种常见的实现方式: 监听原生粘贴事件 通过 @paste 指令或原生 addEventListen…

vue 实现搜索

vue 实现搜索

实现 Vue 搜索功能 在 Vue 中实现搜索功能通常涉及以下几个关键步骤: 数据绑定与输入监听 使用 v-model 双向绑定搜索输入框的值,监听用户输入: <template>…

vue实现框选

vue实现框选

Vue 实现框选功能 在 Vue 中实现框选功能通常需要监听鼠标事件,计算选区范围,并根据选区范围高亮或选中元素。以下是实现框选功能的关键步骤。 监听鼠标事件 在 Vue 模板中,为容器元素绑定鼠标…

vue 实现原理

vue 实现原理

Vue 实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是 Vue 实现原理的核心要点: 响应式系统 Vu…

vue实现页面定位

vue实现页面定位

Vue 实现页面定位的方法 在 Vue 中实现页面定位通常可以通过以下几种方式完成,包括使用原生 JavaScript 的 scrollIntoView 方法、Vue Router 的滚动行为配置,以…

vue实现点击提交

vue实现点击提交

Vue 实现点击提交功能 在 Vue 中实现点击提交功能通常涉及表单处理和事件绑定。以下是几种常见的实现方式: 使用 v-on 或 @ 绑定点击事件 通过 v-on:click 或简写 @click…