当一个人用settings.py写下面的内容时,我正试图理解事情是如何工作的
AUTHENTICATION_BACKENDS = (
"django.contrib.auth.backends.ModelBackend",
"allauth.account.auth_backends.AuthenticationBackend",
"master_password.auth.ModelBackend"
)文档特别指出:
如果后端引发
PermissionDenied异常,身份验证将立即失败。Django不会检查后面的后端。
在此情况下,当用户输入错误的密码而第一个后端拒绝访问时,上述示例中的第二个和第三个后端如何获得机会?更具体地说,第三个后端属于django-主密码,如果用户使用主密码,即使它与用户的密码不匹配,它也应该允许用户进入。那么,后端怎么会有机会呢?
发布于 2022-01-06 00:05:24
来自文档
Django尝试跨其所有身份验证后端进行身份验证。如果第一个身份验证方法失败,Django将尝试第二个方法,依此类推,直到所有后端都被尝试为止。
django.contrib.auth.backends.ModelBackend (如果我没记错的话)不会引发PermissionDenied,所以如果身份验证失败了,接下来的身份验证后端将被使用,直到找到匹配为止。
AUTHENTICATION_BACKENDS的顺序很重要,因此如果相同的用户名和密码在多个后端有效,Django将在第一个正匹配时停止处理。
如果您发现它确实会引发PermissionDenied,那么该模型后端可能会更好地放在AUTHENTICATION_BACKENDS列表的末尾。
https://stackoverflow.com/questions/70598030
复制相似问题