gpt4 book ai didi

python - Tastypie 将登录用户识别为 AnonymousUser

转载 作者:太空宇宙 更新时间:2023-11-03 19:19:00 24 4
gpt4 key购买 nike

我将 Django 应用程序部署到远程服务器,但 tastypie 无法识别远程服务器上的登录用户。

我有一个 tastypie 资源,可以过滤属于当前登录用户的所有对象:

  def apply_authorization_limits(self, request, object_list):
return object_list.filter(user=request.user)

当我尝试在端点上对对象执行 GET 请求时,出现以下错误:

int() argument must be a string or a number, not 'AnonymousUser

我猜测是因为登录无法正常工作?

或者做到了?在模板页面上,我有以下代码:

{% if user.is_authenticated %}
Logged in as <strong>{{ user.username }}</strong>
<a href="/users/logout">Logout</a>
{% else %}
<a href="/users/signup">Signup</a>
<a href="/users/login">Login</a>
{% endif %}

并且代码正确显示了用户的用户名(这意味着用户已经通过身份验证)。可能会发生什么?在我的本地服务器上,我能够成功地对 tastypie API 执行所有 HTTP 请求,并且我不被称为 AnonymousUser,但在我的远程服务器上,我被称为 Tastypie 的 AnonymousUser

编辑:当我有一个打印语句在任何 View 中打印出 request.user 时,我会得到正确的登录用户。当我的 Tastypie api.py 中有一条打印语句打印出 request.user 时,我就被称为 AnonymousUser。为什么我在 Tastypie 中被称为 AnonymousUser,但在应用程序的其余部分却不然?

编辑:我正在使用以下身份验证:

authentication = Authentication()

如果我将身份验证更改为 ApiKeyAuthentication,那么我必须在对资源的每个 GET/POST 请求上发布用户名和 api key 。这样做的问题是我必须创建一个新的中间 View 来查询用户名和 View ,然后对 Tastypie 端点执行 GET/POST。还有其他解决方案吗?第二种方法是将用户名和 apikey 嵌入到 web 应用程序中,并让 JS 获取这些值并将它们添加到 GET/POST 查询字符串中,但这可能会导致安全问题。这将是一个安全问题,因为如果用户拥有自己的用户名和 api key ,他们就可以冒充另一个用户。

最佳答案

第一:APIKeyAuth:这就像另一个用户通过不安全的连接获取用户名和密码或 session ID 一样严重。

第二:如果您想使用基于 session 的身份验证(它仅适用于当前登录的用户的浏览器),您将需要创建自己的身份验证后端,这在 http://django-tastypie.readthedocs.org/en/latest/authentication_authorization.html#implementing-your-own-authentication-authorization 的文档中有详细介绍。

从那里向上滚动一点,然后阅读有关您选择的身份验证方法的令人讨厌的警告。

关于python - Tastypie 将登录用户识别为 AnonymousUser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10424677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com