Django Tastypie 中的自定义授权 class
Custom Authorization class in Django Tastypie
我使用了以下自定义授权class
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 Unauthorized
当user_status = 1
。但是当我将 user_status
更改为 0 时,它仍然显示
401 Unauthorized
错误。
我未发送授权的原因是,对于每个请求,tastypie 都会检查授权,并给出 200 响应为确定和 401 为未授权。我在这里遗漏了什么吗?
嘿 Sean,我尝试在 super 之前移动自定义代码。我得到一个
AttributeError: ‘AnonymousUser’ object has no attribute ‘profile’
本地主机一切正常,生产出现问题。
这在两种情况下都会发生,当 user_status = 1
和 user_status = 0
时
使用 Django 1.8 和 Tastypie 0.13.3。
在调用 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
。
根据您的代码和症状,我猜您的授权详细信息不正确。检查您的 username
和 api_key
。可能是您输入错误或您在生产中使用了本地授权详细信息。
@Sean Hayes 是对的,我的用户已注销。我正在使用自定义 url 并且不知道默认情况下它没有采用我的 APIAuthentication。
我必须在我的自定义方法中添加 self.is_authenticated(request)
才能正常工作。
我使用了以下自定义授权class
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 Unauthorized
当user_status = 1
。但是当我将 user_status
更改为 0 时,它仍然显示
401 Unauthorized
错误。
我未发送授权的原因是,对于每个请求,tastypie 都会检查授权,并给出 200 响应为确定和 401 为未授权。我在这里遗漏了什么吗?
嘿 Sean,我尝试在 super 之前移动自定义代码。我得到一个
AttributeError: ‘AnonymousUser’ object has no attribute ‘profile’
本地主机一切正常,生产出现问题。
这在两种情况下都会发生,当 user_status = 1
和 user_status = 0
使用 Django 1.8 和 Tastypie 0.13.3。
在调用 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
。
根据您的代码和症状,我猜您的授权详细信息不正确。检查您的 username
和 api_key
。可能是您输入错误或您在生产中使用了本地授权详细信息。
@Sean Hayes 是对的,我的用户已注销。我正在使用自定义 url 并且不知道默认情况下它没有采用我的 APIAuthentication。
我必须在我的自定义方法中添加 self.is_authenticated(request)
才能正常工作。