如何解决decorators.py中的request.user返回不同的结果到views.py中的self.request.user
我在'decorators.py'文件中创建了一个装饰器'unauthenticated_user(view_func)',如果当前用户未通过身份验证,该装饰器将限制用户访问视图。
在“ unauthenticated_user()”函数中,有一个条件“ request.user.is_authenticated”,如果对令牌附加的用户进行了身份验证,则应返回true。但是,在测试此功能时,我注意到“ decorators.py”中的“ request.user”并不总是等于“ views.py”中“ self.request.user”返回的正确值。取而代之的是,它通常会返回以前登录的用户,或者返回“ AnonymousUser”,这会破坏功能。
decorators.py:
def unauthenticated_user(view_func):
def wrapper_func(request,*args,**kwargs):
if request.user.is_authenticated:
return view_func(request,**kwargs)
else:
return HttpResponse('No user logged in')
return wrapper_func
views.py:
@method_decorator(unauthenticated_user,name = 'dispatch')
class Userlogout(APIView):
...
这是我用来测试当decorators.py函数返回'AnonymousUser'时实际上是否有经过身份验证的用户的views.py函数:
class Current(APIView):
def get(self,request,format = None):
try:
return Response(self.request.user.is_authenticated)
except:
return Response("no user currently logged in")
如何确保“ decorators.py”,“ unauthenticated_user”功能可以访问当前请求中的用户,就像“ views.py”中的“当前”视图一样?
任何帮助将不胜感激。据我所知,在“ decorators.py”函数中无法调用“自我”。
谢谢,Grae
解决方法
由于使用的是DRF,因此应使用视图的IsAuthenticated
权限类
from rest_framework.views import APIView
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
class MyAPIView(APIView):
permission_classes = (IsAuthenticated,)
def get(self,request,*args,**kwargs):
return Response({"msg": "Some message"})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。