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

目录
相关文章
|
2天前
|
JavaScript 前端开发 UED
Vue工具和生态系统: Vue.js和服务器端渲染(SSR)有关系吗?请解释。
Vue.js是一个渐进式JavaScript框架,常用于开发单页面应用,但其首屏加载较慢影响用户体验和SEO。为解决此问题,Vue.js支持服务器端渲染(SSR),在服务器预生成HTML,加快首屏速度。Vue.js的SSR可手动实现或借助如Nuxt.js的第三方库简化流程。Nuxt.js是基于Vue.js的服务器端渲染框架,整合核心库并提供额外功能,帮助构建高效的应用,改善用户体验。
4 0
|
3天前
|
Web App开发 JavaScript 开发者
Vue工具和生态系统:什么是Vue DevTools?如何使用它?
Vue Devtools是Vue.js官方的浏览器扩展,用于简化应用调试和优化。可在Chrome和Firefox等浏览器上安装,集成到开发者工具中。安装步骤包括下载源码、npm安装、修改manifest.json并加载编译后的扩展。启用后,开发者能查看Vue组件树,检查属性,并在允许的情况下编辑data,提升开发效率。
5 0
|
3天前
|
JavaScript 测试技术
vue不同环境打包环境变量处理
vue不同环境打包环境变量处理
13 0
|
3天前
|
JavaScript
Vue Steps步骤组件用法
Vue Steps步骤组件用法
12 0
|
3天前
|
JavaScript
Vue项目使用bpmn预览流程图
Vue项目使用bpmn预览流程图
8 0
|
3天前
|
JavaScript
vue中高精度小数问题(加减乘除方法封装)处理
vue中高精度小数问题(加减乘除方法封装)处理
14 0
|
3天前
|
JavaScript
vue项目使用可选链操作符编译报错问题
vue项目使用可选链操作符编译报错问题
11 0
|
3天前
|
JavaScript
Vue项目启动报错处理
Vue项目启动报错处理
7 1
|
3天前
|
JavaScript
vue项目开发笔记记录(四)
vue项目开发笔记记录
41 0
|
3天前
|
JavaScript 定位技术
vue项目开发笔记记录(二)
vue项目开发笔记记录
51 0