luffy之极验短信验证(多条件登录)

多条件登录

  JWT扩展的登录视图,在收到用户名与密码时,也是调用Django的认证系统中提供的authenticate()来检查用户名与密码是否正确。

  我们可以通过修改Django认证系统的认证后端(主要是authenticate方法)来支持登录账号既可以是用户名也可以是手机号。

修改Django认证系统的认证后端需要继承django.contrib.auth.backends.ModelBackend,并重写authenticate方法。

authenticate(self, request, username=None, password=None, **kwargs)方法的参数说明:

  • request    本次认证的请求对象
  • username 本次认证提供的用户账号
  • password  本次认证提供的密码

我们想要让用户既可以以用户名登录,也可以以手机号登录,那么对于authenticate方法而言,username参数即表示用户名或者手机号。

重写authenticate方法的思路:

  1. 根据username参数查找用户User对象,username参数可能是用户名,也可能是手机号
  2. 若查找到User对象,调用User对象的check_password方法检查密码是否正确

在users/utils.py中编写:

def get_user_by_account(account):
    """
    根据帐号获取user对象
    :param account: 账号,可以是用户名,也可以是手机号
    :return: User对象 或者 None
    """
    try:
        if re.match(‘^1[3-9]\d{9}$‘, account):
            # 帐号为手机号
            user = User.objects.get(mobile=account)
        else:
            # 帐号为用户名
            user = User.objects.get(username=account)
    except User.DoesNotExist:
        return None
    else:
        return user

class UsernameMobileAuthBackend(ModelBackend):
    """
    自定义用户名或手机号认证
    """

    def authenticate(self, request, username=None, password=None, **kwargs):
        user = get_user_by_account(username)
        if user is not None and user.check_password(password):
            return user

在配置文件settings.py中告知Django使用我们自定义的认证后端

AUTHENTICATION_BACKENDS = [
    ‘users.utils.UsernameMobileAuthBackend‘,
]

  

在登陆功能中集成极验验证码

  需要先去极验创建账号,并且创建一个新的验证,创建好了以后,就可以得到APPID和APPKEY。

有了id和key以后,就可以根据官方的文档进行集成了.

官方: https://docs.geetest.com/install/overview/start/

python集成文档: https://docs.geetest.com/install/deploy/server/python/

SDK: 开发集成工具包

安装依赖模块:

pip install requests

安装完成模块以后,可以参考官方文档中的案例,把提供验证码和校验验证码的功能集成到视图类中.

文档: https://github.com/GeeTeam/gt3-python-sdk

原文地址:https://www.cnblogs.com/Mixtea/p/10603967.html

时间: 2024-08-01 15:36:08

luffy之极验短信验证(多条件登录)的相关文章

佰新网络科技广州分公司手机短信验证流程设计

1 验证是验证什么?为什么要验证 验证所存在的需求场景,就类似于人之间打招呼的场景.首先打招呼前,需要让机器明白即将作出一系列指令的主 体,即要打招呼的是"人"而不是"机器",所以其验证 目的之一是:对操作者是否为人的身份验证. 当机器知道了这就是要打招呼的对象后,为了满足整个行 为的顺利完成,得需要让机器知道"你"是否有打招呼的 意愿,即验证目的之二是:对操作者是否本人意愿操作的 验证.所有的验证实质都是在满足以上的目的. 02 流程可视化设计

如何实现php手机短信验证功能

http://www.qdexun.cn/jsp/news/shownews.do?method=GetqtnewsdetailAction&id=1677 下载php源代码 现在网站在建设网站时为了保证用户信息的真实性,往往会选择发短信给用户手机发验证码信息,只有通过验证的用户才可以注册,这样保证了用户的联系信息资料的100%的准确性 .今天笔者就跟大家分享一下如何实现php手机短信验证功能,希望对大家有所帮助. 第一.实现php手机短信验证功能的基本思路 1.要找到短信服务提供商,接入短信服

[android]ShareSDK——内容分享和短信验证

前言 新版本号ShareSDK的分享和短信验证,按官网的文档,都须要加入一个<Activity></Activity>标签,而分享和短息验证的这个标签内容都一样.会冲突. 解决的方法:分享用旧版本号,短信验证用新版本号. 后面会有解决的方法. 分享 导入project见初识ShareSDK--嵌入和登陆 <span style="font-size:24px;">OnekeyShare oks = new OnekeyShare(); //全部SSO

【吉光片羽】短信验证

早就听说过阿里大于,短信验证绑定手机的过程我们也经历了很多次.下面简单记录下过程. 1.注册一个应用 得到AppKey 和 App Secret     应用管理-->应用列表 2.设置签名 配置管理-->验证码 签名是出现短信内容最前面的字段,比如[xx科技]xxxx, 这个需要审核.显示是2小时内. 3.设置模板 模板就是用来组织短信内容的部分 4. 应用测试 完成上面3步之后,我们就可以测试下,在应用管理--应用测试 https://www.alidayu.com/center/appl

ASP.NET MVC+Bootstrap 实现短信验证

短信验证大家都已经很熟悉了,基本上每天都在接触手机短信的验证码,比如某宝,某东购物,网站注册,网上银行等等,都要验证我们的手机号码真实性.这样做有什么好处呢. 以前咱们在做网站的时候,为了提高用户注册的质量,防止用户恶意注册,都会设置一些小阻碍,如网页验证码.邮件认证等等.但是道高一尺魔高一丈,很快网站的这些设置都被一些网络黑客利用注册机逐一攻破,这些功能也就随之变成了摆设. 但是魔高一丈道高两丈,随着移动设备的普及,短信验证的功能横空出世.他的出现轻松的排除了传统网站验证码的弊端,还提升了网站

安卓 短信验证MobSMS集成

概念及原理 了解MobSMS 主要API 初始化接口 短信验证接口 短信验证回调 代码部分 MobSMS添加到项目中: S1.下载官方SDK文件link: S2.添加并配置SDK库文件: 添加aar/jar文件到\app\libs项目目录 配置build.gradle repositories{ flatDir{ dirs 'libs' // SMSSDK-2.1.4.aar/SMSSDKGUI-2.1.4.aar文件目录 } } dependencies { compile fileTree(

关于手机短信验证服务

浏览了一下找到三家不错的: 1)云通讯(yuntongxun.com) 感觉比较正规,文档也很全面,功能全,支持语音.短信6分每条套餐可便宜点.不过模板短信验证门槛较高,个人不能用,必须要验证为公司,速度感觉不是很理想但听说用的人多,应该会比较稳定. 2)云片网(yunpian.com) 相对于云通讯感觉略有点底气不足,不过门槛较低,可以个人使用,最低可以55的包(1000条),文档较全不过较云通讯略逊色,速度还可以,可以做条件不足时(无需企业认证)的第一选择. 3)Mob官网(mob.com)

C# 发送短信验证吗

C# 发送短信验证吗,布布扣,bubuko.com

Android studio 2.1 集成第三方短信验证类库

新手弄第三方类库也许会很纳闷,有时弄几天都不行.那就让我带大家10分钟做一个简单的短信验证吧! 1.首先上Mob官网注册账号:http://www.mob.com/#/ 2.下载SMSSDK类库包:http://www.mob.com/#/downloadDetail/SMS/android 3.进入Mob账号后台 4.添加一个android应用 5.我们在android studio创建一个项目,在app项目下添加下面的4个包到libs下: 6.配置build文件 7.在AndroidMani