Django Tastypie中的自定义授权类

时间:2016-06-08 19:13:49

标签: django tastypie

我使用了以下自定义授权类

class CustomDjangoAuthorization(DjangoAuthorization):
    def read_detail(self, object_list, bundle):
        result = super(CustomDjangoAuthorization, self).read_detail(object_list, bundle)
        # now we check here for specific permission
        if bundle.request.user.profile.user_status:
            raise Unauthorized("You are not allowed to access that resource.")
        return result

它给出了

  

401未经授权

user_status = 1时。但是当我将user_status更改为0时,它仍会显示

  

401未经授权

错误。

我的unsends授权理解是,对于每个请求,tastypie检查授权并给出200响应Ok和401 for Unauthorized。我在这里错过了什么吗?

嘿Sean,我尝试在超级之前移动自定义代码。我得到了

  

AttributeError:'AnonymousUser'对象没有属性'profile'

一切都在localhost中工作,生产正在给出一个问题。 在这两种情况下都会发生这种情况:user_status = 1&何时user_status = 0

使用Django 1.8和Tastypie 0.13.3。

3 个答案:

答案 0 :(得分:1)

@Sean Hayes是对的,我的用户已退出。我正在使用自定义网址,并且不知道默认情况下它没有采用我的APIAuthentication。

我必须在自定义方法中添加self.is_authenticated(request)才能使其正常工作。

答案 1 :(得分:0)

在调用super()之前移动您的自定义代码,并添加一项检查以查看用户是否匿名:

class CustomDjangoAuthorization(DjangoAuthorization):
   def read_detail(self, object_list, bundle):
    # check here for specific permission
    if (not bundle.request.user.is_authenticated()) or bundle.request.user.profile.user_status:
        raise Unauthorized("You are not allowed to access that resource.")
    result = super(CustomDjangoAuthorization, self).read_detail(object_list, bundle)
    return result

您收到AttributeError: ‘AnonymousUser’ object has no attribute ‘profile’因为您的用户已退出,因此request.userAnonymousUser,因此没有profile

答案 2 :(得分:0)

根据您的代码和症状,我猜您的授权详细信息不正确。检查您的usernameapi_key。可能您有拼写错误或您在生产中使用本地授权详细信息。