我想知道如何告诉Django根据用户是否标记为工作人员或不是用户而使用哪个身份验证后端。
可以这样做吗?
答案 0 :(得分:7)
由于Django使用身份验证后端来获取用户对象,因此在我们调用后端时不知道用户是否会将其标记为人员。
如Specifying authentication backends中所述,通过链接后端仍然可以为员工和非员工用户使用不同的后端。例如,如果您的设置是:
AUTHENTICATION_BACKEND = (
'myapp.auth.StaffUserBackend',
'django.contrib.auth.backends.ModelBackend',
)
其中myapp.auth.StaffUserBackend
仅识别员工用户,这将在用户进行身份验证时发生:
StaffUserBackend
检查凭据。StaffUserBackend
将返回用户对象,我们就完成了。ModelBackend
检查凭据。ModelBackend
将返回User
对象,并且照常对用户进行身份验证。答案 1 :(得分:0)
随着Django一个接一个地运行所有后端。你可以做的是使用views.py文件中的authenticate函数。
例如,您需要检查员工用户
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'])
在此,只有当用户存在时才会调用您的认证功能。
这是一种粗略的想法,根据您的方便使用它。