+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-08(58)

2019-09(95)

2019-10(18)

2019-11(2)

2019-12(17)

Django自定义身份认证

发布于2019-10-29 17:58     阅读(1197)     评论(0)     点赞(8)     收藏(2)


0

1

2

3

4

5

6

7

8

指定用户名或者手机号登录请求:

"认证"后端 在以下情形是可被扩展:当一个User模型对象带有用户名和密码时,且需要有别与Django默认的认证功能。

可为你的模型提供可通过Django权限系统检测的定制的权限。

你能够扩展默认的User模型,或实现一个完全定制的模型。

指定认证后端:

在底层,Django维护一个"认证后台"的列表。当调用Django.contrib.auth.authenticate()—— 如何登入一个用户 中所描述的 —— Django 会尝试所有的认证后台进行认证。如果第一个认证方法失败,Django 将尝试第二个,以此类推,直至试完所有的认证后台。
使用的认证后台通过AUTHENTICATION_BACKENDS 设置指定。它应该是一个包含Python 路径名称的元组,它们指向的Python 类知道如何进行验证。这些类可以位于Python 路径上任何地方。
默认情况下,AUTHENTICATION_BACKENDS 设置为:

('django.contrib.auth.backends.ModelBackend',)
  • 1

这个基本的认证后台会检查Django 的用户数据库并查询内建的权限。它不会通过任何的速率限制机制防护暴力破解。你可以在自定义的认证后端中实现自己的速率控制机制,或者使用大部分Web 服务器提供的机制。
AUTHENTICATION_BACKENDS 的顺序很重要,所以如果用户名和密码在多个后台中都是合法的,Django 将在第一个匹配成功后停止处理。
如果后台引发PermissionDenied 异常,认证将立即失败。Django 不会检查后面的认证后台。

编写认证后端:

继承django.contrib.auth.backends.ModelBackend后实现authenticate方法即可。

以多账号登录为例,通过用户名 或 手机号进行登录:

class CustomBackend(ModelBackend):
    """
    自定义用户验证
    """
    def authenticate(self, username=None, password=None, **kwargs):
        try:
            user = User.objects.get(Q(username=username)|Q(mobile=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在 settings.py中 定义

AUTHENTICATION_BACKENDS = (
    'users.views.CustomBackend',
)
  • 1
  • 2
  • 3

转载于:https://www.cnblogs.com/zenan/p/9111123.html

0

1

2

3

4

5

6

7

8



所属网站分类: 技术文章 > 博客

作者:83748wuw

链接: https://www.pythonheidong.com/blog/article/147755/8582853e6514eea0d43e/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

8 0
收藏该文
已收藏

评论内容:(最多支持255个字符)