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 框架 JWT 和自定义身份验证后端

使用 Django REST Framework 作为 Django 的身份验证后端

Angular 2 前端 django 2 REST 框架后端用户身份验证

SPA 的 Cookie 与基于令牌的身份验证?

没有用户模型的 Django 基于令牌的身份验证