码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-03-26 22:54:13      阅读:339      评论:0      收藏:0      [点我收藏+]

标签:The   exp   info   并且   ken   mem   def   ocs   utils   

多条件登录

  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

 

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

标签:The   exp   info   并且   ken   mem   def   ocs   utils   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!