指定用户名或者手机号登录请求:
"认证"后端 在以下情形是可被扩展:当一个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