返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue+drf+第三方滑动验证码接入的实现
  • 759
分享到

vue+drf+第三方滑动验证码接入的实现

2024-04-02 19:04:59 759人浏览 薄情痞子
摘要

目录1、背景2、验证流程3、创建验证4、前端代码4.1 添加核心js文件4.2 添加配置4.3 组件修改 5、后端代码5.1 添加配置5.2 接收验证并返回 5.3 添加url路由6

1、背景

近期在项目开发练习中用到了登录功能 + 验证码的需求,验证码一般分为三种类型:图片验证码、短信验证码、滑动验证码,相关实现思路如下

图片验证码

对于图片验证码的实现可以借助python中的第三方模块pillow的相关方法进行实现(有时间会写文章)

短信验证码

短信验证码的主要思路是通过调用第三方短信接口向手机发送短信,接收用户输入并与系统生成的随机数串比对

滑动验证码

滑动验证码一般是利用第三方的验证码服务提供商,例如腾讯防水墙、极验验证等。和我们自己实现验证码的思路相比较,第三方验证码更为安全可靠

本文以腾讯防水墙为例,记录在Vuedrf组合的前后端分离项目中接入第三方滑动验证码服务

2、验证流程

验证的前后端调用时序图如下(图片来源于腾讯验证码官方文档)

3、创建验证

首先登陆到腾讯云控制台创建一个云 api 密钥,在左侧导航栏选择【访问管理】>【API 密钥管理】,进入 API 密钥管理页面,单击【新建密钥】创建密钥。

然后进入验证码控制台,单击【新建验证】,根据需求输入验证名称、验证所属域名、验证渠道(WEB 端或小程序插件)及验证场景,填写完成后,单击【确定】完成验证创建。

最后,查看申请到的资源信息

4、前端代码

4.1 添加核心js文件

把防水墙的前端核心js文件在项目根目录下index.html中使用script标签引入

index.html


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
    <title>opsweb</title>
  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>


或者在src/main.js中通过import引入,导入前需要将上面的核心js文件下载到项目静态文件目录中


// 导入防水墙验证码的核心js文件
import "../static/js/TCaptcha";

4.2 添加配置

src/settings.js中添加配置


export default {
  HOST: 'Http://opsapi.ssgeek.com:8000',  // 后端api地址
  TC_captcha:{
    app_id: "2020427221",  // 腾讯防水墙APPID配置
  },
}


4.3 组件修改

修改登录页面vue组件Login.vue,将登录按钮绑定到验证码显示的自定义方法上,先触发验证码请求再触发登录

template部分


<template>
<!--登录内容开始-->
<div class="inp" v-if="login_type==0">
  <input v-model="username" type="text" placeholder="用户名" class="user">
  <input v-model="passWord" type="password" name="" class="pwd" placeholder="密码">
  <div class="rember">
    <p>
      <input v-model="remember_me" type="checkbox" class="no" name="a"/>
      <span>记住密码</span>
    </p>
  </div>
  <button class="login_btn" @click="show_captcha">登录</button>
<!--登录内容结束-->
</div>
</template>


script部分


<script>
export default {
  name: 'Login',
  data() {
    return {
      login_type: 0,
      remember_me: false,
      username: "",
      password: "",
    }
  },
  methods: {
    show_captcha() {
      var captcha1 = new TencentCaptcha(this.$settings.TC_captcha.app_id, res=> {
        
        // console.log(res);
        this.$axiOS.get(`${this.$settings.HOST}/users/captcha/`,{
          params:{
            ticket: res.ticket,
            randstr: res.randstr,
          }
        }).then(response=>{
          if(response.data.detail){
            // 继续进行登录处理
            this.login();
          }
        }).catch(error=>{
          this.$message.error("对不起,验证码校验不通过!");
        });
      });
      captcha1.show();
    },
    login() {
      // 判断用户是否输入用户名或密码,否则提示用户输入
      if (!this.username) {
        this.$message.error('请输入用户名!')
      } else if (!this.password) {
        this.$message.error('请输入密码!')
      } else {
        // 携带用户名和密码,提交post请求
        this.$axios.post(`${this.$settings.HOST}/users/login/`, {
          username: this.username,
          password: this.password,
        }).then((res) => {
          // 存储token
          if (this.remember_me) {
            localStorage.token = res.data.token;
            sessionStorage.removeItem('token')
          } else {
            sessionStorage.token = res.data.token;
            localStorage.removeItem('token')
          }
          // 跳转到首页
          this.$router.push('/hippo/showcenter')
        }).catch((error) => {  // 捕获请求返回的错误,4xx,5xx
          this.$message.error('用户名或者密码有误,请重新输入!')
        })
      }
    },
  },
};

5、后端代码

相关操作指引可以参考官方示例:https://007.qq.com/Python-access.html

5.1 添加配置

将腾讯验证码控制台查看到的验证信息配置到drf后端代码的配置文件中


# 腾讯防水墙配置
TENCENT_CAPTCHA = {
    "GATEWAY": "https://ssl.captcha.qq.com/ticket/verify",  # 验证码验证地址
    "APPID": "2020427221",  # 验证码应用的APPID
    "App_Secret_Key": "0mnAr1EpNTjm63fQgKPU87w**",  # 验证码应用的AppSecreTKEy
}


5.2 接收验证并返回

在用户app下编写用户验证码的普通类视图view


from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from Django.conf import settings
from urllib.parse import urlencode
from urllib.request import urlopen
import JSON
import ssl


# Create your views here.
class CaptchaAPIView(APIView):
    """验证码"""
    ssl._create_default_https_context = ssl._create_unverified_context

    def get(self, request):
        """接收客户端提交的验证码相关信息"""
        params = {
            "aid": settings.TENCENT_CAPTCHA.get("APPID"),
            "AppSecretKey": settings.TENCENT_CAPTCHA.get("App_Secret_Key"),
            "Ticket": request.query_params.get("ticket"),
            "Randstr": request.query_params.get("randstr"),
            "UserIP": request._request.META.get("REMOTE_ADDR")
        }
        # 把字典数据转换成地址栏的查询字符串格式
        # aid=xxx&AppSecretKey=xxx&xxxxx
        params = urlencode(params)
        # print(params)
        url = settings.TENCENT_CAPTCHA.get("GATEWAY")
        # 发送http的get请求
        f = urlopen("%s?%s" % (url, params))
        # https://ssl.captcha.qq.com/ticket/verify?aid=xxx&AppSecretKey=xxx&xxxxx
        # f.read() 读取响应信息
        content = f.read()
        res = json.loads(content)
        # print(res)
        if int(res.get("response")) == 1:
            # 验证成功
            return Response({"detail": 1})
        else:
            # 验证失败
            return Response({"detail": 0}, status=status.HTTP_400_BAD_REQUEST)

5.3 添加url路由

最后,添加用于前端发送请求的后端url路由


from djanGo.urls import path
from rest_framework_Jwt.views import obtain_jwt_token
from . import views

urlpatterns = [
    path('login/', obtain_jwt_token),
    path('captcha/', views.CaptchaAPIView.as_view()),  # 验证码校验
]

6、运行测试

最终效果如下

在腾讯验证码的后台可以看到详细的请求信息图表

到此这篇关于vue+drf+第三方滑动验证码接入的实现的文章就介绍到这了,更多相关vue+drf+第三方滑动验证码接入内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: vue+drf+第三方滑动验证码接入的实现

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

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

猜你喜欢
  • vue+drf+第三方滑动验证码接入的实现
    目录1、背景2、验证流程3、创建验证4、前端代码4.1 添加核心js文件4.2 添加配置4.3 组件修改 5、后端代码5.1 添加配置5.2 接收验证并返回 5.3 添加url路由6...
    99+
    2024-04-02
  • vue实现滑动验证条
    本文实例为大家分享了vue实现滑动验证条的具体代码,供大家参考,具体内容如下 效果 代码 VerifySlider.vue <template>   <div ...
    99+
    2024-04-02
  • Vue实现滑动验证功能
    用Vue实现滑动验证码,鼠标点击滑动验证,验证成功之后会显示验证通过。 程序分析 1、鼠标的点击2、滑块的拖动3、未验证之前滑动条上显示的文字4、滑块箭头指向Vue函数5、判断是否拖...
    99+
    2024-04-02
  • vue实现移动滑块验证
    本文实例为大家分享了vue实现移动滑块验证的具体代码,供大家参考,具体内容如下 记录一下今天的学习内容 <div class="solidBox" :class="{'so...
    99+
    2024-04-02
  • vue实现图片滑动验证
    本文实例为大家分享了vue实现图片滑动验证的具体代码,供大家参考,具体内容如下 效果图: 1、引用自定义组件 import img0 from '../assets/img.jpg...
    99+
    2024-04-02
  • vue怎么实现滑动验证条
    这篇文章主要介绍“vue怎么实现滑动验证条”,在日常操作中,相信很多人在vue怎么实现滑动验证条问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue怎么实现滑动验证条”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-29
  • 怎么使用Vue插件实现滑动验证码
    这篇“怎么使用Vue插件实现滑动验证码”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用Vue插件实现滑动验证码”文章吧...
    99+
    2023-07-04
  • Java如何实现滑动验证码
    小编给大家分享一下Java如何实现滑动验证码,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!功能:java实现滑动验证码项目是采用springboot,maven开发工具:采用idea1.效果演示2.后端代码控制层@Cont...
    99+
    2023-06-29
  • .NET如何实现滑动验证码
    本篇内容介绍了“.NET如何实现滑动验证码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!CaptchaData.csCaptchaData....
    99+
    2023-07-04
  • vue实现登录滑动拼图验证
    本文实例为大家分享了vue实现登录滑动拼图验证的具体代码,供大家参考,具体内容如下 一、安装插件 npm install --save vue-monoplasty-slide-ve...
    99+
    2024-04-02
  • Vue如何实现滑动验证功能
    这篇文章主要介绍了Vue如何实现滑动验证功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。用Vue实现滑动验证码,鼠标点击滑动验证,验证成功之后会显示验证通过。程序分析鼠标的...
    99+
    2023-06-29
  • vue实现图片滑动验证功能
    图片滑动验证,是目前比较常见的验证方式,主要目的是防止用户利用机器人自动注册、登录、灌水。 目前vue技术日趋成熟,已经有专门针对图片滑动验证功能的插件了。具体使用方式如下: 1....
    99+
    2024-04-02
  • Java实现滑动验证码的示例代码
    目录1.效果演示2.后端代码控制层工具类3.前端页面功能:java实现滑动验证码 项目是采用springboot,maven 开发工具:采用idea 1.效果演示 2.后端代码...
    99+
    2024-04-02
  • C#滑动验证码拼图验证功能实现(SlideCaptcha)
    目录使用背景:实现分析:后端代码:准备:使用:前端代码:结语:使用背景: 关于滑动验证码的使用场所还是非常多的,如:调取短信接口之前,和 注册请求之前 或者 频繁会调用的接口都需要加...
    99+
    2024-04-02
  • Flutter实现滑动块验证码功能
    Flutter实现滑动块验证码功能,供大家参考,具体内容如下 本文实现的是一个用于登录时,向右滑动滑动块到最右边完成验证的一个功能。当滑动未到最右边时,滑动块回弹回左边起始位置。 ...
    99+
    2024-04-02
  • 聊聊php滑动验证码的实现原理
    随着互联网的迅速发展,验证码成为了互联网安全保障的重要手段。其中,滑动验证码由于其简单易懂、操作方便、安全性高等特点,在实际应用中已经得到了广泛的应用。本文将介绍php滑动验证码的实现原理。一、滑动验证码的定义与应用滑动验证码是一种人机交互...
    99+
    2023-05-14
    php
  • Java实现滑动验证码(前端部分)
    目录实现思路实现代码实现结果实现思路 1、请求后端获得背景图、滑块、x、y、误差范围bound 2、将滑块设置到对应的位置:top = y 3、添加鼠标滑动事件 实现代码 后端请求(...
    99+
    2022-11-13
    Java滑动验证码 Java 验证码
  • 登录校验之滑块验证码完整实现(vue + springboot)
    文章目录 前言一、实现效果二、实现思路三、实现步骤1. 后端 java 代码1.1 新建一个拼图验证码类1.2 新建一个拼图验证码工具类1.3 新建一个 service 类1.4 新建一个 controller 类1.5 登录接口 ...
    99+
    2023-08-18
    vue.js spring boot java
  • php滑动验证码的实现原理是什么
    今天小编给大家分享一下php滑动验证码的实现原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、滑动验证码的定义与应...
    99+
    2023-07-05
  • Flutter怎么实现滑动块验证码功能
    这篇文章主要介绍“Flutter怎么实现滑动块验证码功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter怎么实现滑动块验证码功能”文章能帮助大家解决问题。本文实现的是一个用于登录时,向右...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作