我将我的 Django 应用程序部署到远程服务器上,但 sweetpie 无法识别远程服务器上的登录用户。
我有一个美味的资源,可以过滤属于当前登录用户的所有对象:
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,但在我的远程服务器上,我被称为AnonymousUser to Tastypie
编辑:当我在任何视图中有一个打印语句打印出 request.user 时,我得到了正确的登录用户。当我在我的 Tastypie api.py 中有一个打印出 request.user 的语句时,我就被称为 AnonymousUser。为什么我会被 Tastypie 称为 AnonymousUser 而不是应用程序的其余部分?
编辑:我正在使用以下身份验证:
authentication = Authentication()
如果我将身份验证更改为 ApiKeyAuthentication,那么我必须将每个 GET/POST 请求上的用户名和 api 密钥发布到资源。这样做的问题是我必须创建一个新的中间视图来查询用户名和视图,然后对 Tastypie 端点执行 GET/POST。有没有另一种解决方案?第二种方法是将用户名和 apikey 嵌入到 webapp 中,让 JS 获取这些值并将它们添加到 GET/POST 查询字符串中,但这可能会导致安全问题。这将是一个安全问题,因为如果用户拥有用户名和 api 密钥,他们可以假装是另一个用户。