前端代码:

<template>
  <div>
    <div ref="vaptcha"></div>
    <button @click="submit">提交</button>
  </div>
</template>

<script>
import Vaptcha from 'vaptcha-sdk';

export default {
  data() {
    return {
      vid: 'xxxxx', // 替换成自己的vid
      challenge: '',
      validate: ''
    }
  },
  mounted() {
    this.initVaptcha()
  },
  methods: {
    initVaptcha() {
      const that = this;
      const vaptcha = new Vaptcha(this.vid, {
        container: this.$refs.vaptcha,
        type: 'popup',
        scene: 0,
        offline_server: 'https://www.vaptcha.com/demo/tk',
        onSuccess(challenge, validate) {
          that.challenge = challenge;
          that.validate = validate;
        }
      });
      vaptcha.init();
    },
    async submit() {
      // 向后端提交验证结果
      const res = await fetch('/api/vaptcha/', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          challenge: this.challenge,
          validate: this.validate
        })
      });
      const data = await res.json();
      console.log(data);
    }
  }
}
</script>

后端代码:

from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse

import requests
import json

@csrf_exempt
def vaptcha(request):
    if request.method == 'POST':
        # 获取前端提交的验证结果
        data = json.loads(request.body.decode('utf-8'))
        challenge = data.get('challenge')
        validate = data.get('validate')

        # 向vaptcha服务器验证
        url = 'http://api.vaptcha.com/v2/validate'
        params = {
            'id': 'xxxxx',  # 替换成自己的vid
            'secretkey': 'xxxxx',  # 替换成自己的key
            'scene': 0,
            'challenge': challenge,
            'validate': validate
        }
        res = requests.get(url, params=params)
        res_data = json.loads(res.text)
        if res_data['success']:
            return JsonResponse({'msg': '验证成功', 'code': 200})
        else:
            return JsonResponse({'msg': '验证失败', 'code': 400})
``
vue2中使用vaptcha并生成一个组件提交到drf后端把后端也写一下

原文地址: https://www.cveoy.top/t/topic/gvOw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录