【发布时间】:2020-10-06 20:56:06
【问题描述】:
我是 Django 新手,我正在尝试编写一些 API。 Django 具有基于用户的身份验证request.user.is_authenticated() 来检查是否有有效用户登录。
还有会话认证。
-
会话身份验证与 Django 基于用户的身份验证有何不同?
-
哪个更安全?我正在尝试编写调用第三方 API 的其余 API。
-
不使用模型是否可以使用tastepie SessionAuthentication?
我没有找到任何在没有模型的情况下实现了 sweetpie 的 REST API 示例。
【问题讨论】:
-
什么是“基于用户的身份验证”?
request.user.is_authenticated()尝试在会话表中查找用户发送的 cookie。如果 cookie 在 db 中存在,则表示客户端已通过身份验证。 “基于用户的身份验证”和会话身份验证之间没有区别。它们是一回事。 -
会话身份验证不同于 is_authenticated。 is_authenticated 是始终为 True 的只读属性(与始终为 False 的 AnonymousUser.is_authenticated 相对)。这是一种判断用户是否已通过身份验证的方法。这并不意味着任何权限,也不会检查用户是否处于活动状态或具有有效会话。即使通常您会检查 request.user 上的此属性以了解它是否已由 AuthenticationMiddleware(代表当前登录的用户)填充,但您应该知道该属性对于任何 User 实例都是 True。
-
啊,是的。原谅我的错误。我应该说 Django 会将
request.user设置为当前登录的用户,它通过查看 cookie 并在会话表中找到匹配项来确定该用户。所以,request.user.is_authenticated通过代理仍然是基于会话的身份验证。