在Django中,登录后如何检测哪个auth后端对用户进行了身份验证?

扎德

我试图在我的视图中区分几个Django身份验证后端(它们是外部软件包,我最好不希望对其进行修改)。django.contrib.authdocs表示auth backends(settings.AUTHENTICATION_BACKENDS)将按顺序尝试,第一个进行身份验证的后端将返回并进行设置request.user,如果引发异常,则拒绝身份验证。但这并没有说明我如何根据哪个后端对用户进行身份验证来区分请求。

这可能吗?如何?

安特旺

Django文档中有关身份验证后端设置的说明

用户通过身份验证后,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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查用户何时在Firebase中对电话进行了身份验证?

Flask-Login检查是否在没有装饰器的情况下对用户进行了身份验证

为什么用户登录后必须使用Firebase进行身份验证?

Django使用登录的Windows域用户进行身份验证

在Django中重置密码后对用户进行身份验证

在前端使用OAuth成功进行身份验证后,如何与后端进行交互?

检查用户是否仍在angularfire2中进行了身份验证

使用令牌身份验证时如何在Django通道中的Websocket连接中对用户进行身份验证

Django-身份验证不会向用户添加后端

如何使用后端服务器对Google Home用户进行身份验证?

如何列出Django用户可用的身份验证后端?

如何判断用户的电子邮件地址是否已使用Django,allauth,rest-auth和自定义用户进行了验证

检查用户是否从后端Firebase身份验证登录

如何使用第三方CAS身份验证从独立的前端与django后端(相同的域,不同的端口)对用户进行身份验证?

错误:7 PERMISSION_DENIED:您的应用已使用Google Cloud SDK中的最终用户凭据进行了身份验证

登录时对用户进行身份验证

即使在注册流程中对用户进行了身份验证,如何解决Firebase“用户未授权”错误?

FB朋友列表已对同一应用程序进行了身份验证

如何使用sqldatabase在mvc中对登录进行身份验证

客户端检查是否在Firebase中进行了身份验证

如何确定使用哪个SSH密钥文件对登录进行身份验证?

通过javascript AND凭证提供程序对AWS API Gateway进行了身份验证

使用后端进行身份验证,无需用户干预(使用新的登录 API)

检查用户是否在不安全的路由上进行了身份验证

如何知道用户是否通过 firebase 的第一个请求进行了身份验证

使用 Firebase Auth 对其进行身份验证后,如何在最终用户 c# 应用程序中安全地使用 Google Speech API?

node.js tls 模块进行了哪些相互身份验证检查?

如何使用 django-microsoft-auth 获取当前登录用户进行 Microsoft 身份验证?

在使用 IAP 中的“云身份验证登录”进行身份验证后,如何限制用户仅使用他的用户名(通过该用户名进行身份验证)?