DRF 中使用 级验科技滑动验证
接口的login 登录
使用 Django 中的 auth 认证 因为之前合并了 django 的 用户表 创建的 用户 密码 会在内部进行加密 不知道加密方式所以要使用 authenticate 来进行判断
使用
APIView自定义一个 视图
导入 认证
from django.contrib.auth import authenticate
使用 自带的 认证来判断用户名跟密码
class LoginView(APIView):
def post(self, request):
res_obj = MyResponse() # 使用自定义的 响应对象
username, password = request.data.get('username'), request.data.get('password')
auth_obj = authenticate(username=username,password=password)
if auth_obj:
res_obj.data = '登陆成功!'
else:
res_obj.data = '账号或密码错误!'
# logger.debug(request.data)
return Response(res_obj.dict)
可以使用邮箱登录
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.backends import ModelBackend
from django.db.models import Q
from models import UserProfile # 让用户可以用邮箱登录
# setting 里要有对应的配置
class CustomBackend(ModelBackend):
def authenticate(self, username=None, password=None, **kwargs):
try:
user = UserProfile.objects.get(Q(username = username) | Q(email=username))
if user.check_password(password):
return user
except Exception as e:
return None
复制代码
记得引入models中创建的表 # AUTH 方法(支持邮箱登录)
AUTHENTICATION_BACKENDS = ('users.views.CustomBackend',)
级验科技滑动验证
注意官方文档 学习使用 SDK 并下载 匹配使用 的 SDK
后端 创建 对应的 返回 初始化滑动验证 的 json 数据
from django.shortcuts import HttpResponse
# 从 SDK的 \gt3-python-sdk-master\sdk 中 查找 工具类
from utils.geetest import GeetestLib # 请在官网申请ID使用,示例ID不可使用
pc_geetest_id = "b46d1900d0a894591916ea94ea91bd2c"
pc_geetest_key = "36fc3fe98530eea08dfc6ce76e3d24c4" # 页面初始化时请求的 数据
def pcgetcaptcha(request):
user_id = 'test'
gt = GeetestLib(pc_geetest_id, pc_geetest_key)
status = gt.pre_process(user_id)
# 前后端分离的 项目 永不到
# request.session[gt.GT_STATUS_SESSION_KEY] = status
# request.session["user_id"] = user_id
response_str = gt.get_response_str()
return HttpResponse(response_str)从前端 接收 对应的 数据
// 导入 必须的js文件 从sdk 文档中 查找
import '@/assets/js/gt' created() {
this.$axios.get('/pcgetcaptcha/')
.then((res) => {
console.log(res);
//请检测data的数据结构, 保证data.gt, data.challenge, data.success有值
let data = res.data;
initGeetest({
// 以下配置参数来自服务端 SDK
gt: data.gt,
challenge: data.challenge,
offline: !data.success,
new_captcha: true,
// product: 'popup', // 选项: float、popup、custom、bind
}, function (captchaObj) {
// 这里可以调用验证实例 captchaObj 的实例方法
captchaObj.appendTo("#captchaBox");
//将验证按钮插入到宿主页面中captchaBox元素内 id 选择器
})
})
},
二次 验证 前端 发送 登录请求 并且携带着 滑动验证的 参数
注意:
- validateResult 是包存在 组件中的 data 数据 在 通过滑动验证时执行的函数 需要注意 this 的指向问题 通过 在 外部定义变量来保存 this 对象
methods: {
// 登录的 点击按钮
login_btn() {
this.$axios.post('/login/', {
username: this.username,
password: this.password,
// 滑动验证 相应的 参数
geetest_challenge: this.validateResult.geetest_challenge,
geetest_validate: this.validateResult.geetest_validate,
geetest_seccode: this.validateResult.geetest_seccode,
})
.then((res) => {
if (res.data.code === 0) {
this.$router.push({name: 'home'})
} else {
alert(res.data.error)
}
})
}
},
created() {
this.$axios.get('/pcgetcaptcha/')
.then((res) => {
// 定义变量 保存 this 指向
let base = this;
//请检测data的数据结构, 保证data.gt, data.challenge, data.success有值\
let data = res.data;
initGeetest({
// 以下配置参数来自服务端 SDK
gt: data.gt,
challenge: data.challenge,
offline: !data.success,
new_captcha: true,
// product: 'popup', // 选项: float、popup、custom、bind
}, function (captchaObj) { // 这里可以调用验证实例 captchaObj 的实例方法
//将验证按钮插入到宿主页面中captchaBox元素内 id 选择器
captchaObj.appendTo("#captchaBox");
captchaObj.onReady(function () {
// 加载完验证控件之后 执行
}).onSuccess(function () {
// 验证成功之后 执行
let result = captchaObj.getValidate();
console.log(result);
base.validateResult = result;
}).onError(function () {
// console.log(3333)
//your code
}) }) })},
在视图中 接收 用户信息 以及 滑动验证的 数据
class LoginView(APIView):
def post(self, request):
res_obj = MyResponse()
# 用于滑动验证
gt = GeetestLib(pc_geetest_id, pc_geetest_key)
challenge = request.data.get(gt.FN_CHALLENGE, '')
validate = request.data.get(gt.FN_VALIDATE, '')
seccode = request.data.get(gt.FN_SECCODE, '')
status = True # 前后端分离 没有session 数据 改为 True
if status:
# 通过 级验科技验证
result = gt.success_validate(challenge, validate, seccode, None)
else:
# 通过本地验证
result = gt.failback_validate(challenge, validate, seccode)
if result: # 判断是否是真人 还是爬虫
# 常规用户登录的 数据验证
username, password = request.data.get('username'), request.data.get('password')
auth_obj = authenticate(username=username,password=password)
if auth_obj:
res_obj.data = '登陆成功!'
else:
res_obj.error = '账号或密码错误!'
res_obj.code = 1
else:
# 滑动验证不通过
res_obj.code = 1
res_obj.error = '必须通过滑动验证!'
return Response(res_obj.dict)
DRF 中使用 级验科技滑动验证的更多相关文章
- Django中使用极验Geetest滑动验证码
一,环境部署 1.创建一个django测试项目 此处省略... 二,文档部署 1.下载安装python对应的SDK 使用命令从Github导入完整项目:git clone https://github ...
- Django中使用geetest实现滑动验证
下载第三方模块 导入模块social-auth-app-django 和geetest 提前去官网下载gt.js或者引入http://static.geetest.com/static/tools/g ...
- Vue(7)- vue-cookies、极验滑动验证geetest、vue-router的导航守卫
一.vue-cookies 参考文档简书:https://www.jianshu.com/p/535b53989b39 参考文档npm:https://www.npmjs.com/package/vu ...
- vue-cookies、极验滑动验证geetest、vue-router的导航守卫
一 . vue-cookies 参考文档简书:https://www.jianshu.com/p/535b53989b39 参考文档npm:https://www.npmjs.com/package/ ...
- 滑动验证的设计与实现J2EE
滑动验证的设计与实现J2EE 注:本博文为博主原创,转载请注明出处. 项目源码地址:https://github.com/zhangxy1035/Verify 本篇博文的主要目录如下: 一.项目简介二 ...
- 在AspNetCore中使用极验做行为认证
先上效果图 极验的流程 极验官方文档地址 https://docs.geetest.com/install/deploy/server/csharp 简单说明一下极验的验证流程 引用官方的图片 向服务 ...
- C# Selenium 破解腾讯滑动验证
什么是Selenium? WebDriver是主流Web应用自动化测试框架,具有清晰面向对象 API,能以最佳的方式与浏览器进行交互. 支持的浏览器: Mozilla Firefox Google C ...
- DRF中的序列化器
DRF中的序列化器详细应用 视图的功能:说白了就是接收前端请求,进行数据处理 (这里的处理包括:如果前端是GET请求,则构造查询集,将结果返回,这个过程为序列化:如果前端是POST请求,假如要对数 ...
- day 88 Vue学习之八geetest滑动验证
本节目录 一 geetest前端web中使用 二 xxx 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 geetest前端web中使用 下载gt文件,官网地址,下面我 ...
随机推荐
- 买or不买?如何测试博彩公司赔率是否合理?
世界杯期间,烧烤店.酒吧都热闹起来了,柔柔我的朋友圈也热闹起来了,有酱紫的: 还有酱紫的: 然后还有酱紫的: 酱紫的: 当然天台也是一如既然的热闹: 似乎人人都在输钱,那真正的赢家在哪里呢?博彩业的真 ...
- SpringBoot中并发定时任务的实现、动态定时任务的实现(看这一篇就够了)
原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10659045.html,否则将追究法律责任!!! 一.在JAVA开发领域,目前可以通过以下 ...
- 谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?
在日常开发中,尤其是业务开发,少不了利用 Java 对数据库进行基本的增删改查等数据操作,这也是 Java 工程师的必备技能之一.做好数据操作,不仅仅需要对 Java 语言相关框架的掌握,更需要对各种 ...
- idea代码快捷
idea代码快捷:main函数快捷:psvmfor循环快捷:fori.foreach系统输出快捷:sout.serr 更多的提示可以按Ctrl+ J 进行查看 更改快捷:File-->Setti ...
- js 时间戳转换为‘yyyy-MM-dd hh:mm’格式(es6语法)
function formatDate(date,fmt) { if(/(y+)/.test(fmt)){ fmt = fmt.replace(RegExp.$1,(date.getFullYear( ...
- fetch数据请求的封装
export default class HttpUtils { static get(url){ return new Promise((resolve,reject)=>{ fetch(ur ...
- <API自动化测试>Centos-Newman
一.介绍: 在测试和开发中,有一款API测试工具一直占据着武林盟主的地位,那就是声名远播的Google公司的Postman. Postman原先是Chrome浏览器的一个插件,后面发展成了一个应用程序 ...
- <解决方法>Centos安装使用Chromedriver
一.安装Chrome 我安装好Centos系统后,就在网上去找Chrome浏览器的安装方法,使用过yum,rpm都安装不上,会报错,然后询问公司的运维,他给我了个包,然后使用:yum localins ...
- C# 使用System.Data.OleDb;避免oracle中文乱码问题
首先,需要保证oracle客户端服务器的字符集是一样的,并且保证该字符集支持中文.你可以使用plsql查看是否乱码. 代码: using System; using System.Collection ...
- x3D 下载以及如何使用原版NetBeans IDE 来搭建x3d编辑环境
安装前: Overview X3D-Edit version 3.3 standalone application and Netbeans plugin are available and read ...