博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
极验滑动验证登录
阅读量:4484 次
发布时间:2019-06-08

本文共 4852 字,大约阅读时间需要 16 分钟。

极验滑动验证登录

滑动验证码

验证码是网站用来防止网络入侵的一种手段,现在相对安全而且比较流行的就是滑动验证码,

实现效果如下:

 

geetest

 

极验验证码

官网:

Python 实现的滑动验证码网址:

注意: 使用第三方插件时不要求看懂,只要求能按照提供的 demo 和技术文档完成其功能。

安装极验自己的包

在项目中需要使用极验自己的包

from geetest import GeetestLib

可以使用 Pycharm 安装此包或者直接用 pip 安装

pip install geetest

HTML 页面代码

需要引入极验提供的 JS 文件

使用 AJAX 异步向后台发送数据,所以引入 JQuery 文件

HTML 代码部分与普通 Form 表单页面所不同的就是多了个放置验证码的 form-group 组:

前端向后端获取验证码信息

通过 AJAX 异步从后端获取验证码信息,代码直接拷过来就行,需要注意的是代码中获取验证码的路由,在 urls 和 views 中添加响应代码。

// 验证开始需要向网站主后台获取id,challenge,success(是否启用failback)    $.ajax({        url: "/pc-geetest/register?t=" + (new Date()).getTime(), // 加随机数防止缓存        type: "get",        dataType: "json",        success: function (data) {            // 使用initGeetest接口            // 参数1:配置参数            // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它做appendTo之类的事件            initGeetest({                gt: data.gt,                challenge: data.challenge,                product: "popup", // 产品形式,包括:float,embed,popup。注意只对PC版验证码有效                offline: !data.success // 表示用户后台检测极验服务器是否宕机,一般不需要关注                // 更多配置参数请参见:http://www.geetest.com/install/sections/idx-client-sdk.html#config            }, handlerPopup);        }    });

urls 中添加响应的路由:

url(r'^pc-geetest/register', views.pcgetcaptcha),

views 中响应的视图函数: 直接拷贝

# 请在官网申请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)

前端向后盾发送验证码及数据信息

直接拷贝后需要改动的地方有:

  1. 进行二次验证的 url
    url:"/login/"
  2. 往后端发送的数据
    username: $("#username").val(),password: $("#password").val(),csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val(),
  3. 成功返回数据后的操作
    success: function (data) {    if (data.status) {        // 有错误,在页面上提示        $(".login-error").text(data.msg);    } else {        // 登陆成功        location.href = data.msg;    }}
  4. 绑定 AJAX 触发元素
    $("#login-button").click(function () {        captchaObj.show();    });
  5. 绑定显示滑动验证码的元素
    // 将验证码加到id为captcha的元素里captchaObj.appendTo("#popup-captcha");
var handlerPopup = function (captchaObj) {    // 成功的回调    captchaObj.onSuccess(function () {        var validate = captchaObj.getValidate();        $.ajax({            // url: "/pc-geetest/ajax_validate",            url: "/login/", // 进行二次验证            type: "post",            dataType: "json",            data: {                username: $("#username").val(),                password: $("#password").val(),                csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val(),                // 极验需要传到后端的数据                geetest_challenge: validate.geetest_challenge,                geetest_validate: validate.geetest_validate,                geetest_seccode: validate.geetest_seccode            },            success: function (data) {                if (data.status) {                // 有错误,在页面上提示                $(".login-error").text(data.msg);            } else {                // 登陆成功                location.href = data.msg;            }            }        });    });    $("#login-button").click(function () {        captchaObj.show();    });    // 将验证码加到id为captcha的元素里    captchaObj.appendTo("#popup-captcha");    // 更多接口参考:http://www.geetest.com/install/sections/idx-client-sdk.html};

视图函数处理

需要改动的地方就是验证码正确与不正确时返回的数据

def login(request):    if request.method == "POST":        # 初始化一个给AJAX返回的数据        ret = {
"status": 0, "msg": ""} # 从提交过来的数据中 取到用户名和密码 username = request.POST.get("username") password = request.POST.get("password") # 极验获取的验证码并验证 gt = GeetestLib(pc_geetest_id, pc_geetest_key) challenge = request.POST.get(gt.FN_CHALLENGE, '') validate = request.POST.get(gt.FN_VALIDATE, '') seccode = request.POST.get(gt.FN_SECCODE, '') status = request.session[gt.GT_STATUS_SESSION_KEY] user_id = request.session["user_id"] if status: result = gt.success_validate(challenge, validate, seccode, user_id) else: result = gt.failback_validate(challenge, validate, seccode) if result: # 验证码正确 # 利用auth模块做用户名和密码的校验 user = auth.authenticate(username=username, password=password) if user: auth.login(request, user) ret["msg"] = "/index/" else: # 用户名密码错误 ret["status"] = 1 ret["msg"] = "用户名或密码错误!" else: ret["status"] = 1 ret["msg"] = "验证码错误" return JsonResponse(ret) return render(request, "login.html")

GitHub 地址:

 

转载于:https://www.cnblogs.com/banshaohuan/p/9573249.html

你可能感兴趣的文章
三种样式表插入方法
查看>>
hdu 2139 Calculate the formula (递推)
查看>>
mac, ios 模拟器
查看>>
双向宽度优先搜索
查看>>
常见的异常处理
查看>>
Linux基本命令参数
查看>>
Django系列(一)
查看>>
【ASP.NET Web API教程】2.3.3 创建Admin控制器
查看>>
第二类斯特林数
查看>>
Mysql
查看>>
JQuery中简约的进度条插件推荐
查看>>
url override and HttpSession implements session for form
查看>>
servlet乱码问题
查看>>
反射+特性实现 类和XML文档的序列化反序列化
查看>>
日常方法
查看>>
解决Ueditor在bootstarp 模态框中全屏问题
查看>>
POJ 1006 Biorhythms
查看>>
dubbo+zookeeper注册服务报错问题:No service registed on zookeeper
查看>>
极验滑动验证登录
查看>>
求多个数的质因子
查看>>