当前位置:首页 > 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 实现走势图的方法 使用 ECharts 库 ECharts 是一个强大的数据可视化库,支持多种图表类型,包括走势图(折线图)。在 Vue 项目中可以通过 vue-echarts 封装库或直接使…

vue原型实现

vue原型实现

Vue 原型实现的关键点 Vue.js 的原型系统是其响应式机制的核心部分,通过原型链实现数据的动态绑定和依赖收集。以下是实现 Vue 原型的主要技术要点。 数据响应式原理 Vue 通过 Objec…

vue实现盖章

vue实现盖章

Vue 实现盖章功能 在Vue中实现盖章功能通常涉及前端UI交互,通过Canvas或SVG绘制印章,并允许用户拖拽或点击放置印章。以下是具体实现方法: 使用Canvas绘制印章 通过HTML5的Ca…

vue 实现列表

vue 实现列表

Vue 实现列表的方法 在 Vue 中实现列表通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 指令遍历数组,渲染列表项。ite…

vue实现suspense

vue实现suspense

Vue 3 中实现 Suspense Suspense 是 Vue 3 引入的一个内置组件,用于处理异步依赖的加载状态。它允许在等待异步组件或异步数据加载时显示一个后备内容(fallback),直到异…

vue实现route

vue实现route

Vue 路由实现方法 Vue 中实现路由通常使用 vue-router 库,这是 Vue 官方推荐的路由管理器。以下是具体实现步骤: 安装 vue-router 通过 npm 或 yarn 安…