【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--

目录
相关文章
|
1天前
|
存储 JavaScript 前端开发
【Vue】绝了!这生命周期流程真...
【Vue】绝了!这生命周期流程真...
|
1天前
|
JavaScript 索引
【vue】框架搭建
【vue】框架搭建
6 1
|
1天前
|
JavaScript 前端开发 容器
< 每日小技巧: 基于Vue状态的过渡动画 - Transition 和 TransitionGroup>
Vue 的 `Transition` 和 `TransitionGroup` 是用于状态变化过渡和动画的组件。`Transition` 适用于单一元素或组件的进入和离开动画,而 `TransitionGroup` 用于 v-for 列表元素的增删改动画,支持 CSS 过渡和 JS 钩子。
< 每日小技巧: 基于Vue状态的过渡动画 - Transition 和 TransitionGroup>
|
1天前
|
JavaScript
【vue】setInterval的嵌套实例
【vue】setInterval的嵌套实例
5 1
|
1天前
|
JavaScript 前端开发 安全
【Vue】内置指令真的很常用!
【Vue】内置指令真的很常用!
|
1天前
|
JavaScript
【Vue】过滤器Filters
【Vue】过滤器Filters
|
1天前
|
存储 JavaScript
Vue的状态管理:Vuex的使用和最佳实践
【4月更文挑战第24天】Vue状态管理库Vuex用于集中管理组件状态,包括State(全局状态)、Getters(计算属性)、Mutations(同步状态变更)和Actions(异步操作)。Vuex还支持Modules,用于拆分大型状态树。使用Vuex时,需安装并创建Store,定义状态、getter、mutation和action,然后在Vue实例中注入Store。遵循最佳实践,如保持状态树简洁、使用常量定义Mutation类型、避免直接修改状态、在Actions中处理异步操作、合理划分Modules,以及利用Vuex提供的插件和工具,能提升Vue应用的稳定性和可维护性。
|
JavaScript 测试技术 容器
Vue2+VueRouter2+webpack 构建项目
1). 安装Node环境和npm包管理工具 检测版本 node -v npm -v 图1.png 2). 安装vue-cli(vue脚手架) npm install -g vue-cli --registry=https://registry.
982 0
|
1天前
|
资源调度 JavaScript 前端开发
Vue的路由管理:VueRouter的配置和使用
【4月更文挑战第24天】VueRouter是Vue.js的官方路由管理器,用于在单页面应用中管理URL路径与组件的映射。通过安装并引入VueRouter,设置路由规则和创建router实例,可以实现不同路径下显示不同组件。主要组件包括:`&lt;router-link&gt;`用于创建导航链接,`&lt;router-view&gt;`负责渲染当前路由对应的组件。此外,VueRouter还支持编程式导航和各种高级特性,如嵌套路由、路由参数和守卫,以应对复杂路由场景。
|
1天前
|
JavaScript 前端开发 开发者
Vue的响应式原理:深入探索Vue的响应式系统与依赖追踪
【4月更文挑战第24天】Vue的响应式原理通过JavaScript getter/setter实现,当数据变化时自动更新视图。它创建Watcher对象收集依赖,并通过依赖追踪机制精确通知更新。当属性改变,setter触发更新相关Watcher,重新执行操作以反映数据最新状态。Vue的响应式系统结合依赖追踪,有效提高性能,简化复杂应用的开发,但对某些复杂数据结构需额外处理。