暂无分类
暂无标签
发布于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',)
这个基本的认证后台会检查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
在 settings.py中 定义
AUTHENTICATION_BACKENDS = (
'users.views.CustomBackend',
)
转载于: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黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
Copyright © 2018-2019 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系z452as@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!