首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解AUTHENTICATION_BACKENDS

理解AUTHENTICATION_BACKENDS
EN

Stack Overflow用户
提问于 2022-01-05 18:42:39
回答 1查看 355关注 0票数 1

当一个人用settings.py写下面的内容时,我正试图理解事情是如何工作的

代码语言:javascript
复制
AUTHENTICATION_BACKENDS = (
    "django.contrib.auth.backends.ModelBackend",
    "allauth.account.auth_backends.AuthenticationBackend",
    "master_password.auth.ModelBackend"
)

文档特别指出:

如果后端引发PermissionDenied异常,身份验证将立即失败。Django不会检查后面的后端。

在此情况下,当用户输入错误的密码而第一个后端拒绝访问时,上述示例中的第二个和第三个后端如何获得机会?更具体地说,第三个后端属于django-主密码,如果用户使用主密码,即使它与用户的密码不匹配,它也应该允许用户进入。那么,后端怎么会有机会呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-06 00:05:24

来自文档

Django尝试跨其所有身份验证后端进行身份验证。如果第一个身份验证方法失败,Django将尝试第二个方法,依此类推,直到所有后端都被尝试为止。

django.contrib.auth.backends.ModelBackend (如果我没记错的话)不会引发PermissionDenied,所以如果身份验证失败了,接下来的身份验证后端将被使用,直到找到匹配为止。

AUTHENTICATION_BACKENDS的顺序很重要,因此如果相同的用户名和密码在多个后端有效,Django将在第一个正匹配时停止处理。

如果您发现它确实会引发PermissionDenied,那么该模型后端可能会更好地放在AUTHENTICATION_BACKENDS列表的末尾。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70598030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档