【发布时间】:2013-04-13 12:46:41
【问题描述】:
我想知道如何根据用户是否被标记为员工来告诉 Django 使用哪个身份验证后端。
这个可以吗?
【问题讨论】:
标签: django django-models python-2.7 django-admin django-authentication
我想知道如何根据用户是否被标记为员工来告诉 Django 使用哪个身份验证后端。
这个可以吗?
【问题讨论】:
标签: django django-models python-2.7 django-admin django-authentication
由于 Django 使用身份验证后端来获取用户对象,因此在我们调用后端时不知道用户是否会被标记为员工。
仍然可以通过链接后端来为员工和非员工用户使用不同的后端,如Specifying authentication backends 中所述。例如,如果您的设置是:
AUTHENTICATION_BACKEND = (
'myapp.auth.StaffUserBackend',
'django.contrib.auth.backends.ModelBackend',
)
myapp.auth.StaffUserBackend 仅识别员工用户,这将在用户进行身份验证时发生:
StaffUserBackend 检查凭据。StaffUserBackend 返回用户对象,我们就完成了。ModelBackend 检查凭据。ModelBackend 将返回 User 对象,并且用户照常进行身份验证。【讨论】:
作为 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 函数。
这是一种粗略的想法,请根据您的方便使用它。
【讨论】: