我使用了以下自定义授权类
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。
答案 0 :(得分:1)
我必须在自定义方法中添加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.user
为AnonymousUser
,因此没有profile
。
答案 2 :(得分:0)
根据您的代码和症状,我猜您的授权详细信息不正确。检查您的username
和api_key
。可能您有拼写错误或您在生产中使用本地授权详细信息。