iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue集成阿里云做滑块验证的实践
  • 856
分享到

Vue集成阿里云做滑块验证的实践

2024-04-02 19:04:59 856人浏览 泡泡鱼
摘要

目录前言集成阿里云验证前端需要什么引入阿里云验证封装一个验证组件使用组件思考前言 滑块验证是比较常见的人机鉴别手段,但是自己做一时半会还真搞不出来,想想这玩意还挺难琢磨,怎么识别是否

前言

滑块验证是比较常见的人机鉴别手段,但是自己做一时半会还真搞不出来,想想这玩意还挺难琢磨,怎么识别是否是人机呢?本文介绍Vue+阿里云验证做出这个小功能。

集成阿里云验证

前端需要什么

引入阿里云验证

public/index.html

<head>
  <script src="https://g.alicdn.com/AWSC/AWSC/awsc.js"></script>
</head>

vue.config.js

module.exports = {
  configurewebpack: {
    externals: {
      AWSC: 'AWSC',
    },
  }
}

封装一个验证组件

思路其实很简单,功能也单一。

  • 初始化加载阿里云验证控件
  • 可刷新验证控件

下面说两个重点

1. 初始化放在mounted,是因为涉及到Dom加载问题,created时Dom并未加载完成会报错。
2. Watch里面监听是否刷新
3.. 记得样式自定义下

下面开始写组件
NoCaptcha.vue

<template>
  <div>
    <div id="nc">

    </div>
  </div>
</template>

<script>
export default {
  // 验证成功后,服务端报错(如账号/密码等错误),需要重置滑块
  props: {
    reload: {
      type: Boolean,
      default: false,
    },
  },
  data() {
    return {
      ic: '', // noCaptcha实例
    };
  },
  watch: {
    reload: {
      handler(newV) {
        console.log(newV);
        if (newV) {
          this.nc.reset();  // 重置滑块
        }
      },
    },
  },
  mounted() {
    this.init(); // 初始化方法
  },
  methods: {
    init() {
      const self = this;
      // 实例化nc
      // eslint-disable-next-line no-undef
      AWSC.use('nc', function(state, module) {
        // 初始化
        self.nc = module.init({
          // 您可以在阿里云验证码控制台的配置管理页签找到对应的appkey字段值,请务必正确填写。
          appkey: 'FFFF0N00000000005CE9',
          // 您可以在阿里云验证码控制台的配置管理页签找到对应的scene值,请务必正确填写。
          scene: 'nc_login',
          // 滑块渲染的DOM id。
          renderTo: 'nc',
          // 您可以在该回调参数中将会话ID(sessionId)、签名串(sig)、请求唯一标识(token)字段记录下来,随业务请求一同发送至您的服务端调用验签。
          success: function(data) {
            data.scene = 'nc_login'
            self.$emit('slideCallback', data);
          },
          // 滑动验证失败时触发该回调参数。
          fail: function(failCode) {
            this.$message(`滑动验证失败,失败编号${failCode}`);
            console.log(failCode);
          },
          // 验证码加载出现异常时触发该回调参数。
          error: function(errorCode) {
            this.$message(`验证码加载异常,异常编号${errorCode}`);
            console.log(errorCode);
            self.$emit('slideCallback', {cls:false});
          },
        });
      });
    },
  },
};
</script>

<style lang="sCSS" scoped>
#nc {
  width: 100%;
  display: contents;
}
/deep/.nc-container #nc_1_wrapper {
  width: 100%;
  height: 36px;
  line-height: 36px;
  #nc_1_n1t,
  #nc_1__bg,
  #nc_1_n1z,
  #nc_1__scale_text,
  .nc-lang-cnt {
    height: 36px;
    line-height: 36px;
  }
}
</style>

使用组件

需要考虑的问题

  • 验证控件没加载出来的情况怎么办?(例如IE不支持)
  • 运维人员不需要
  • 有用户名密码,再去验证自动调用登录事件

很简单验证控件加载失败会有个回调,让后端加个参数,没加载验证组件,让他知道予以通行就好

<template>
  // 其他代码略
  <NoCaptcha @slideCallback="finishSlide" :reload="reload" />
</template>

<script>
// 其他代码略
import NoCaptcha from '@/components/NoCaptch.vue';

data() {
  return {
    reload: false,
  }
},
method: {
  // 点击登录
  login() {
    // 验证略
    this.reload = false; // 验证通过后,重置滑块设置为false
    // 后端登录接口
    xx()
    .then(() => {
       // 登录成功代码略
    })
    .catch((err) => {
       // 其他代码略
       this.reload = true; // 需要重置滑块
       console.log(err || '该用户无菜单权限,请联系管理员'); // 错误提示
    });
  },
  // 完成滑动
  finishSlide(data) {
    // 按需使用返回值
    console.log('会话ID', data.sessionId)
    console.log('签名串', data.sig)
    console.log('滑块请求的token', data.token)
    
     if (data.cls === false) {//验证加载失败
        this.loginFORM.cls = false
      }

      if (data.sessionId) {//非人机操作
        this.loginForm.scene = data.scene
        this.loginForm.ncToken = data.token
        this.loginForm.sig = data.sig
        this.loginForm.sessionId = data.sessionId
        delete this.loginForm.cls
      }

      if (this.loginForm.username && this.loginForm.passWord) {//填过用户名密码
        this.login()
      }
  },
}
</script>

思考

  • 如果这个控件让前端自己做或者后端自己做,能实现吗?
  • 这个滑动验证机制明白吗?
  • 这个能实现绝对安全吗?

PS:我思考了一下,前端需要引入阿里云的sdk,这个sdk会收集用户数据。然后滑块滑动完成后会将这些数据进行分析判断是否为人机。当然这算法是人家的机密,毕竟要赚钱的嘛。其实这个滑动算法是可以模拟的,也不是绝对安全,只是增加了一个步骤而已。

到此这篇关于Vue集成阿里云做滑块验证的实践的文章就介绍到这了,更多相关Vue 滑块验证内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue集成阿里云做滑块验证的实践

本文链接: https://www.lsjlt.com/news/163002.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue集成阿里云做滑块验证的实践
    目录前言集成阿里云验证前端需要什么引入阿里云验证封装一个验证组件使用组件思考前言 滑块验证是比较常见的人机鉴别手段,但是自己做一时半会还真搞不出来,想想这玩意还挺难琢磨,怎么识别是否...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作