Django 基于状态的多重身份验证后端
Posted
技术标签:
【中文标题】Django 基于状态的多重身份验证后端【英文标题】:Django Multiple Authentication Backends Based On Status 【发布时间】:2013-04-13 12:46:41 【问题描述】:我想知道如何根据用户是否被标记为员工来告诉 Django 使用哪个身份验证后端。
这个可以吗?
【问题讨论】:
【参考方案1】:由于 Django 使用身份验证后端来获取用户对象,因此在我们调用后端时不知道用户是否会被标记为员工。
仍然可以通过链接后端来为员工和非员工用户使用不同的后端,如Specifying authentication backends 中所述。例如,如果您的设置是:
AUTHENTICATION_BACKEND = (
'myapp.auth.StaffUserBackend',
'django.contrib.auth.backends.ModelBackend',
)
myapp.auth.StaffUserBackend
仅识别员工用户,这将在用户进行身份验证时发生:
StaffUserBackend
检查凭据。
如果用户是员工并且凭据正确,StaffUserBackend
返回用户对象,我们就完成了。
如果用户不是员工,则会根据 ModelBackend
检查凭据。
如果凭据对标准用户有效,ModelBackend
将返回 User
对象,并且用户照常进行身份验证。
如果任何后端都不接受凭据,则身份验证失败。
【讨论】:
【参考方案2】:作为 Django 一个接一个地运行所有后端。您可以做的是在您的 views.py 文件中使用身份验证功能。
例如你想检查员工用户然后
email = form.cleaned_data['email']
try:
name = StaffUser.objects.get(email=email)
except StaffUser.DoesNotExist:
return "Do whatever you want"
user = authenticate(username=form.cleaned_data['email'], password=form.cleaned_data['password'])
只有当用户存在时才会调用你的 autheticaton 函数。
这是一种粗略的想法,请根据您的方便使用它。
【讨论】:
以上是关于Django 基于状态的多重身份验证后端的主要内容,如果未能解决你的问题,请参考以下文章
AWS Cognito 作为网站的 Django 身份验证后端
使用 Django REST Framework 作为 Django 的身份验证后端