Vue中如何进行表单验证码与滑动验证

news2024/10/7 4:31:05

在Vue中实现表单验证码与滑动验证功能

验证码和滑动验证是Web应用程序中常见的安全功能,用于验证用户的身份并防止恶意活动。Vue.js作为一个流行的JavaScript框架,提供了许多工具和库来实现这些功能。本文将介绍如何使用Vue来实现表单验证码和滑动验证功能,包括使用vue-recaptcha库和自定义滑动验证组件。

在这里插入图片描述

准备工作

在开始之前,确保您已经安装了Vue CLI,并创建了一个Vue项目。如果您尚未安装Vue CLI,请使用以下命令进行安装:

npm install -g @vue/cli

然后,您可以使用Vue CLI创建一个新的Vue项目:

vue create my-captcha-app

进入项目目录:

cd my-captcha-app

使用vue-recaptcha库

vue-recaptcha是一个用于在Vue中集成Google reCAPTCHA的库。Google reCAPTCHA是一个广泛使用的验证码服务,用于验证用户是否为人类。首先,我们需要安装这个库:

npm install vue-recaptcha

集成Google reCAPTCHA

首先,在Google reCAPTCHA网站上注册您的站点并获取reCAPTCHA的Site Key。然后,在您的Vue应用程序中,您可以在main.js文件中设置全局Site Key:

import Vue from 'vue';
import App from './App.vue';
import VueRecaptcha from 'vue-recaptcha';

Vue.config.productionTip = false;

Vue.component('vue-recaptcha', VueRecaptcha);

new Vue({
  render: h => h(App),
}).$mount('#app');

创建一个表单验证码组件

现在,我们可以创建一个Vue组件,用于包含验证码字段。创建一个名为CaptchaForm.vue的组件文件,并添加以下内容:

<template>
  <div>
    <form @submit.prevent="submitForm">
      <vue-recaptcha
        ref="recaptcha"
        @verify="onCaptchaVerify"
        :sitekey="reCaptchaSiteKey"
      ></vue-recaptcha>
      <button type="submit">提交</button>
    </form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      reCaptchaSiteKey: 'YOUR_RECAPTCHA_SITE_KEY',
      isCaptchaVerified: false,
    };
  },
  methods: {
    onCaptchaVerify(response) {
      this.isCaptchaVerified = true;
    },
    submitForm() {
      if (this.isCaptchaVerified) {
        alert('表单已提交!');
      } else {
        alert('请完成验证码验证!');
      }
    },
  },
};
</script>

在上述代码中,我们导入了vue-recaptcha组件,并在表单中包含了reCAPTCHA字段。用户需要完成验证码验证后才能提交表单。

创建自定义滑动验证组件

除了reCAPTCHA外,您还可以创建自定义的滑动验证组件,以实现更多的定制化。我们将创建一个名为SliderCaptcha.vue的组件,来展示如何实现这个功能。

<template>
  <div>
    <div
      class="slider"
      :class="{ 'passed': isPassed, 'dragging': isDragging }"
      @mousedown="startDrag"
      @touchstart="startDrag"
      @mousemove="drag"
      @touchmove="drag"
      @mouseup="endDrag"
      @touchend="endDrag"
    >
      <div class="slider-background"></div>
      <div class="slider-handle"></div>
    </div>
    <button @click="checkCaptcha">验证</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isDragging: false,
      isPassed: false,
      startX: 0,
      endX: 0,
      threshold: 50,
    };
  },
  methods: {
    startDrag(event) {
      event.preventDefault();
      this.isDragging = true;
      this.startX = event.clientX || event.touches[0].clientX;
    },
    drag(event) {
      if (!this.isDragging) return;
      this.endX = event.clientX || event.touches[0].clientX;
    },
    endDrag() {
      if (!this.isDragging) return;
      this.isDragging = false;
      const distance = this.endX - this.startX;
      if (distance >= this.threshold) {
        this.isPassed = true;
      }
    },
    checkCaptcha() {
      if (this.isPassed) {
        alert('验证通过!');
      } else

 {
        alert('请滑动解锁!');
      }
    },
  },
};
</script>

<style scoped>
.slider {
  position: relative;
  width: 300px;
  height: 50px;
  background-color: #f0f0f0;
  cursor: pointer;
  user-select: none;
  margin: 20px 0;
  overflow: hidden;
  border-radius: 25px;
}

.slider.passed .slider-handle {
  background-color: #4caf50;
}

.slider.dragging .slider-handle {
  background-color: #2196f3;
}

.slider-background {
  position: absolute;
  width: 100%;
  height: 100%;
  background-color: #4caf50;
  border-radius: 25px;
  transition: transform 0.3s;
}

.slider-handle {
  position: absolute;
  width: 50px;
  height: 50px;
  background-color: #2196f3;
  border-radius: 50%;
  transform: translateX(0);
  transition: background-color 0.3s;
}

button {
  padding: 10px 20px;
  background-color: #2196f3;
  color: white;
  border: none;
  border-radius: 5px;
  cursor: pointer;
}
</style>

在上述代码中,我们创建了一个自定义的滑动验证组件。用户需要滑动滑块到达一定的阈值才能通过验证。验证通过后,用户可以点击提交按钮。

在主应用中使用组件

现在,您可以在主应用中导入并使用这两个组件。打开src/App.vue文件并进行如下修改:

<template>
  <div id="app">
    <CaptchaForm />
    <SliderCaptcha />
  </div>
</template>

<script>
import CaptchaForm from '@/components/CaptchaForm.vue';
import SliderCaptcha from '@/components/SliderCaptcha.vue';

export default {
  components: {
    CaptchaForm,
    SliderCaptcha,
  },
};
</script>

运行您的表单验证码与滑动验证应用

现在,您可以运行您的Vue应用程序并测试表单验证码和滑动验证功能。使用以下命令启动Vue开发服务器:

npm run serve

然后,访问http://localhost:8080以查看您的应用程序。您将看到一个包含reCAPTCHA字段的表单,用户需要完成验证码验证后才能提交表单。另外,还有一个自定义的滑动验证组件,用户需要滑动滑块来解锁验证。

总结

在Vue中实现表单验证码和滑动验证功能是非常有用的,可以提高您的Web应用程序的安全性。使用vue-recaptcha库和自定义的滑动验证组件,您可以轻松地实现这些功能。在实际应用中,您可以根据需求进一步扩展和自定义这些功能,以满足您的特定需求。希望本文对您有所帮助,让您更好地理解如何在Vue中实现表单验证码与滑动验证功能。 Happy coding!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1062308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

solidity 合约转java

Generate a Java Wrapper from your Smart Contract Solidity Gradle Plugin - Web3j web3j / web3j-maven-plugin GitLab

ARM汇编与C言语的混合编程

1. C言语如何与汇编进行交互 有些时候&#xff0c;我们需要在汇编代码中调用C代码&#xff0c;或者说C代码中调用汇编代码。 那么&#xff0c;汇编调用C代码&#xff0c;或者C代码调用汇编函数&#xff0c;他们的函数参数、返回值是如何传递的&#xff1f; 对应ARM架构来说&…

学习开发一个RISC-V上的操作系统(汪辰老师) — unrecognized opcode `csrr t0,mhartid‘报错问题

前言 &#xff08;1&#xff09;此系列文章是跟着汪辰老师的RISC-V课程所记录的学习笔记。 &#xff08;2&#xff09;该课程相关代码gitee链接&#xff1b; &#xff08;3&#xff09;PLCT实验室实习生长期招聘&#xff1a;招聘信息链接 正文 &#xff08;1&#xff09;在跟着…

【重拾C语言】五、模块化程序设计——函数(定义、调用、参数传递、结果返回、函数原型;典例:打印字符图形、验证哥德巴赫猜想)

目录 前言 五、模块化程序设计——函数 5.1 计算三角形的重心 5.2 函数 5.2.1 函数定义 5.2.2 函数调用 a. 函数调用的形式和过程 b. 参数传递 值传递 指针传递 c. 函数结果返回 5.2.3 函数原型&#xff08;先调用后定义&#xff09; 5.3 程序设计实例 5.3.1 打印…

【14】c++设计模式——>工厂模式

简单工厂模式的弊端 简单工厂模式虽然简单&#xff0c;但是违反了设计模式中的开放封闭原则&#xff0c;即工厂类在数据增加时需要被修改&#xff0c;而我们在设计时对于已经设计好的类需要避免修改的操作&#xff0c;而选用扩展的方式。 工厂模式设计 简单工厂模式只有一个…

【Java】接口 interface

目录 概述 示例代码&#xff1a; 接口成员访问特点 示例代码&#xff1a; 概述 什么是接口 接口就是一种公共的规范标准&#xff0c;只要符合规范标准&#xff0c;大家都可以调用。 Java 中的接口更多的体现在对行为的抽象&#xff01; 1. 接口 用关键字 interface 修饰 pub…

AtCoder Beginner Contest 231(D-F,H)

D - Neighbors (atcoder.jp) &#xff08;1&#xff09;题意 给出M组关系&#xff0c;问是否有一个排列&#xff0c;能表示A[i]和B[i]相邻 &#xff08;2&#xff09;思路 考虑如果有环&#xff0c;显然不能满足排列&#xff0c;因为排列中度数最多为2&#xff0c;若有超过2的显…

JavaScript操作CSS样式

上节课我们基本完成了游戏的主体&#xff0c;这节课我们来学习如果使用JavaScript去操作CSS样式 ● 例如&#xff0c;我们现在想当玩家输入对的数字之后&#xff0c;我们讲背景改为绿色&#xff0c;并且把number的框宽度变大 const secretnumber Math.trunc(Math.random() * …

第十六章 类和对象——运算符重载

运算符重载概念&#xff1a;对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型。 一、加号运算符重载 作用&#xff1a;实现两个自定义数据类型相加的运算 class Person {public:Person() {};Person(int a, int b){this->m_A a;t…

5个适合初学者的初级网络安全工作,网络安全就业必看

前言 网络安全涉及保护计算机系统、网络和数据免受未经授权的访问、破坏和盗窃 - 防止数字活动和数据访问的中断 - 同时也保护用户的资产和隐私。鉴于公共事业、医疗保健、金融以及联邦政府等行业的网络犯罪攻击不断升级&#xff0c;对网络专业人员的需求很高&#xff0c;这并…

【异常错误】WSL2设置为全核cpu和全部内存

今天偶尔发现 WSL占用的内存是真实内存的一半&#xff08;通过htop命令查看即可&#xff09; 现在需要修改配置到使用全部的CPU资源&#xff1a; Windows R 键&#xff0c; 输入 %UserProfile% 并运行进入用户文件夹, 新建文件 .wslconfig&#xff0c;文件内容如下&#xf…

light client轻节点简介

1. 引言 前序博客&#xff1a; Helios——a16z crypto构建的去中心化以太坊轻节点 去中心化和自我主权对于Web3的未来至关重要,但是这些理想并不总适用于每个项目或应用程序。在非托管钱包和bridges等工具中严格优先考虑安全性而不是便利性的用户&#xff0c;可选择运行全节…

【JavaEE】多线程(五)- 基础知识完结篇

多线程&#xff08;五&#xff09; 文章目录 多线程&#xff08;五&#xff09;volatile关键字保证内存可见性JMM&#xff08;Java Memory Model&#xff09; 不保证原子性 wait 和 notifywait()notify()线程饿死 上文我们主要讲了 synchronized以及线程安全的一些话题 可重入…

【Unity】3D贪吃蛇游戏制作/WebGL本地测试及项目部署

本文是Unity3D贪吃蛇游戏从制作到部署的相关细节 项目开源代码&#xff1a;https://github.com/zstar1003/3D_Snake 试玩链接&#xff1a;http://xdxsb.top/Snake_Game_3D 效果预览&#xff1a; 试玩链接中的内容会和该效果图略有不同&#xff0c;后面会详细说明。 游戏规则 …

图像分割中的色块的提取

一 色块提取方法&#xff1a; ①首先是色彩模型的转换 由RGB颜色空间转到HSV颜色空间 原因&#xff1a;RGB颜色空间适合显示系统&#xff0c;但是各分量间相关性很强&#xff0c;比如当图像亮度发生变化时&#xff0c;RGB三个分量都会发生相应改变 但是HSV颜色空间更能感知颜色…

【Java 进阶篇】JDBC 数据库连接池 C3P0 详解

数据库连接池是数据库编程中常用的一种技术&#xff0c;它可以有效地管理数据库连接&#xff0c;提高数据库访问的性能和效率。在 Java 编程中&#xff0c;有多种数据库连接池可供选择&#xff0c;其中之一就是 C3P0。本文将详细介绍 C3P0 数据库连接池的使用&#xff0c;包括原…

LabVIEW使用ZigBee无线传感器开发住宅负载电力应用

LabVIEW使用ZigBee无线传感器开发住宅负载电力应用 长期以来&#xff0c;住宅客户的需求一直是电力行业的一部分。由于公用事业需要建设基础设施以满足即时和长期需求&#xff0c;因此公用事业账单既包含能源费用&#xff0c;其中衡量客户随时间消耗的总电量&#xff0c;也包含…

网络攻击常见手段总结

网络攻击常见手段总结 IP 欺骗 IP 欺骗技术是什么&#xff1f; IP 欺骗技术就是伪造某台主机的 IP 地址的技术。通过 IP 地址的伪装使得某台主机能够伪装另外的一台主机&#xff0c;而这台主机往往具有某种特权或者被另外的主机所信任。 攻击时&#xff0c;伪造大量的 IP 地…

文件操作 和 IO - 详解

一&#xff0c;认识文件 1.1 树形结构组织和目录 文件是对于"硬盘"数据的一种抽象&#xff0c;在一台计算机上&#xff0c;有非常多的文件&#xff0c;这些文件是通过 "文件系统" 来进行组织的&#xff0c;本质上就是通过 "目录"(文件夹) 这样…

PyTorch实例:简单线性回归的训练和反向传播解析

文章目录 &#x1f966;引言&#x1f966;什么是反向传播&#xff1f;&#x1f966;反向传播的实现&#xff08;代码&#xff09;&#x1f966;反向传播在深度学习中的应用&#x1f966;链式求导法则&#x1f966;总结 &#x1f966;引言 在神经网络中&#xff0c;反向传播算法…