我试图在我的视图中区分几个Django身份验证后端(它们是外部软件包,我最好不希望对其进行修改)。django.contrib.auth
docs表示auth backends(settings.AUTHENTICATION_BACKENDS
)将按顺序尝试,第一个进行身份验证的后端将返回并进行设置request.user
,如果引发异常,则拒绝身份验证。但这并没有说明我如何根据哪个后端对用户进行身份验证来区分请求。
这可能吗?如何?
用户通过身份验证后,Django会在用户会话中存储用于验证用户身份的后端,并在需要访问当前身份验证的用户时在会话持续时间内重复使用相同的后端。这实际上意味着身份验证源将按会话进行缓存
实际上,此信息是在使用功能时存储的login(request, user, backend=None)
(请参阅参考资料django.contrib.auth.__init__.py
)。用户通过身份验证后,将存储以下会话信息:
SESSION_KEY = '_auth_user_id'
BACKEND_SESSION_KEY = '_auth_user_backend'
HASH_SESSION_KEY = '_auth_user_hash'
# [...]
request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)
request.session[BACKEND_SESSION_KEY] = backend
request.session[HASH_SESSION_KEY] = session_auth_hash
因此,您应该检查当前请求的会话以获取密钥,BACKEND_SESSION_KEY
以找到用于验证用户身份的后端。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句