繁体   English   中英

Tastypie将已登录用户识别为AnonymousUser

[英]Tastypie recognizes logged in user as AnonymousUser

我将Django应用程序部署到了远程服务器,但是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 %}

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

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

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

authentication = Authentication()

如果将身份验证更改为ApiKeyAuthentication,则必须将每个GET / POST请求上的用户名和api密钥发布到资源。 这样做的问题是,我必须创建一个新的中间视图,该视图查询用户名和视图,然后将GET / POST进行到asteappie端点。 还有其他解决方案吗? 第二种方法是将用户名和apikey嵌入到webapp中,并让JS捕获这些值并将其添加到GET / POST查询字符串中,但这可能会导致安全问题。 这将是一个安全问题,因为如果用户具有用户名和api密钥,则该用户可能会假装为另一个用户。

首先:APIKeyAuth:问题就好像另一个用户通过不安全的连接获取用户名和密码或会话ID。

第二:如果您要使用基于会话的身份验证(仅适用于浏览器,对于当前登录的用户而言),您将需要创建自己的身份验证后端,有关此文档的详细信息,请参见http://django-tastypie.readthedocs .org / zh-CN / latest / authentication_authorization.html#implementing-您自己的认证授权

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM