【vue】对接第三方行为验证极验,拿来即用的vue极验组件

简介: 第三方行为验证极验,在我们的日常开发中,很多时间都会用到。但是极验官网的demo是依赖jquery,如果我们的项目中不想引入jquery,那么接入会是一件令人头疼的事情,所以抽空将以前的接入经验总结了一下,希望对以后有用。

第三方行为验证极验,在我们的日常开发中,很多时间都会用到。但是极验官网的demo是依赖jquery,如果我们的项目中不想引入jquery,那么接入会是一件令人头疼的事情,所以抽空将以前的接入经验总结了一下,希望对以后有用。底部有源码,拿来即用,启动命令 npm run serve

极验

极验的主要功能是进行行为验证,保证我们的接口被恶意刷。其中应用最多的场景是,短信验证码,邮箱验证码,注册,登录。等比较敏感的接口。

极验交互流程

image

官方网址

极验官网: https://www.geetest.com/

文档地址: https://docs.geetest.com/install/apirefer/api/web/

极验demo

极验的demo都是jquery实现的,依赖jquery文件,我们在vue项目如果不希望引入jquery的话,接入会不太方便。

公司项目需要用到极验,所以对极验进行了组件封装,在页面中所有需要用到的地方都可以直接引用。

依赖

1,极验js,gt.js,可在官网下载,或者在我的demo中获取。
2,axios,发起请求。

 "dependencies": {
    "axios": "^0.19.0",
    "vue": "^2.5.17",
    "vue-router": "^3.0.1"
  },

1,引入极验js文件

我的js是在src文件下的assets文件中存放的gt.js

assets文件与main.js是并列的。

在main.js中引入,并在vue原型中挂载极验初始化函数。

// 导入极验
require('@/assets/gt.js');
// 绑定到原型
Vue.prototype.$initGeet=initGeetest;

全部main.js内容

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import axios from "axios";
Vue.prototype.axios = axios;
// 导入极验
require('@/assets/gt.js');
// 绑定到原型
Vue.prototype.$initGeet=initGeetest;

Vue.config.productionTip = false

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

2,极验组件Geet.vue

<template>
  <div>
    <i ref="btn"></i>
  </div>
</template>
<script>
export default {
  data() {
    return {};
  },
  //   接受父组件传递的值,用来控制图形验证的加载
  props: ["isGeet"],
  methods: {
    GtCaptcha() {
      let _this = this;
      //   此url是极验官网的测试请求地址,加随机数防止缓存
      _this.axios
        .get(
          "http://www.geetest.com/demo/gt/register-slide?t=" +
            new Date().getTime()
        )
        .then(res => {
          console.log("1,页面初始化,调用极验接口1,进行图形验证码的加载");
          // 极验第一次,请求回来的参数
          console.log(res);
          let data = res.data;
          var handlerEmbed = function(captchaObj) {
            //   图形验证成功
            captchaObj
              .onSuccess(function() {
                var result = captchaObj.getValidate();
                let param = {
                  geetest_challenge: result.geetest_challenge,
                  geetest_validate: result.geetest_validate,
                  geetest_seccode: result.geetest_seccode,
                  status: data.success
                };
                // 极验校验的参数,将其传给服务端,进行校验。
                console.log(
                  "3,图形验证通过,将数据传递给父组件,进行服务端验证"
                );
                _this.$emit("geetPath", param);
              })
              .onError(function() {
                //   图形验证失败
              });
            //   为此页面的虚拟按钮添加点击事件
            _this.$refs.btn.addEventListener("click", function demo() {
              // 极验图片触发之后,修改控制变量额布尔值,实现再次触发
              _this.$emit("clickChange", false);
              if (_this.isGeet) {
                captchaObj.verify();
              }
            });
          };
          //   初始化极验
          _this.$initGeet(
            {
              gt: data.gt,
              challenge: data.challenge,
              product: "bind",
              offline: !data.success,
              https: true
            },
            handlerEmbed
          );
        });
    }
  },

  computed: {},

  created() {
    // 页面创建,调用函数
    this.GtCaptcha();
  },

  mounted() {},
  watch: {
    // 监听参数的变化,调用极验
    isGeet: function() {
      //   这里通过按钮事件调用极验
      this.$refs.btn.click();
    }
  }
};
</script>
<style scoped></style>

3,极验页面GtPage.vue

<template>
  <div>
    <button @click="btnClick()">极验</button>
    <!-- isgt是一个布尔值,当前页面点击按钮,修改它,子组件监听数据变化,加载滑动模块 -->
    <Geet :isGeet="isgt" @geetPath="GeetPath" @clickChange="GeetChange"></Geet>
  </div>
</template>
<script>
import Geet from "./Geet.vue";
export default {
  data() {
    return {
      isgt: false
    };
  },
  components: {
    Geet
  },

  methods: {
    btnClick() {
      console.log("2,按钮被点击,进行图形验证");
      this.isgt = !this.isgt;
    },
    // 极验图片加载之后,通过更改控制变量实现可以再次加载
    GeetChange(val) {
      this.isgt = val;
    },
    GeetPath(val) {
      console.log("4,接受到图形验证参数,将参数发往服务端进行验证");
      console.log(val);
      this.isgt = false;
    }
  },

  computed: {},

  created() {},

  mounted() {}
};
</script>
<style scoped>
</style>

4,说明

页面代码中都添加了备注,只要引入axios模块(npm install --save axios),并在main.js中挂载(

import axios from "axios";
Vue.prototype.axios = axios;

)。将上边两个文件copy就可以正常看到运行效果

地址

demo链接:https://pan.baidu.com/s/1WC1ROdIh9YJdgwtITl0xPg

提取码:l7le

极验官网: https://www.geetest.com/

文档地址: https://docs.geetest.com/install/apirefer/api/web/

--END--

目录
相关文章
|
7天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
vue学习第四章
|
7天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
vue学习第九章(v-model)
|
7天前
|
JavaScript 前端开发 开发者
vue学习第十章(组件开发)
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文深入讲解Vue组件的基本使用、全局与局部组件、父子组件通信及数据传递等内容,适合前端开发者学习参考。持续更新中,期待您的关注!🎉🎉🎉
vue学习第十章(组件开发)
|
1天前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
15 7
|
1天前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
12天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
12天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
|
存储 前端开发 JavaScript
为什么我不再用Vue,改用React?
当我走进现代前端开发行业的时候,我做了一个每位开发人员都要做的决策:选择一个合适的框架。当时正逢 jQuery 被淘汰,前端开发者们不再用它编写难看的、非结构化的老式 JavaScript 程序了。
|
13天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
13天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
下一篇
无影云桌面