基于状态的Django多重认证后端

ice*_*x3d 4 django django-models django-admin django-authentication python-2.7

我想知道如何告诉Django使用哪个身份验证后端,如果用户被标记为人员,或者他们不是.

可以这样做吗?

Nic*_*tot 7

由于Django使用身份验证后端来获取用户对象,因此在我们调用后端时不知道用户是否会将其标记为人员.

仍然可以通过链接后端来为员工和非员工用户使用不同的后端,如指定身份验证后端中所述.例如,如果您的设置是:

 AUTHENTICATION_BACKEND = (
     'myapp.auth.StaffUserBackend',
     'django.contrib.auth.backends.ModelBackend',
 )
Run Code Online (Sandbox Code Playgroud)

这里myapp.auth.StaffUserBackend只能识别用户的工作人员,当用户验证会出现这种情况:

  • 核对凭证StaffUserBackend.
  • 如果用户是员工并且凭据正确,则StaffUserBackend返回用户对象,我们就完成了.
  • 如果用户不是员工,则会检查凭据ModelBackend.
  • 如果凭据对标准用户有效,则ModelBackend返回该User对象,并像往常一样对用户进行身份验证.
  • 如果任何后端不接受凭据,则身份验证将失败.