request.user decorators.py returns 与自己不同的结果。request.user views.py
request.user in decorators.py returns different results to self.request.user in views.py
我在我的 'decorators.py' 文件中创建了一个装饰器 'unauthenticated_user(view_func)',如果当前用户未通过身份验证,它会限制用户访问视图。
在 'unauthenticated_user()' 函数中,有一个条件 'request.user.is_authenticated' 如果附加到令牌的用户已通过身份验证,则该条件 return 应为真。但是,在测试此函数时,我注意到 'decorators.py' 中的 'request.user' 并不总是等于 'views.py' 中 'self.request.user' 编辑的正确值 return。相反,它通常 return 以前登录过的用户,或者 'AnonymousUser' 破坏了功能。
decorators.py:
def unauthenticated_user(view_func):
def wrapper_func(request, *args, **kwargs):
if request.user.is_authenticated:
return view_func(request, *args, **kwargs)
else:
return HttpResponse('No user logged in')
return wrapper_func
views.py:
@method_decorator(unauthenticated_user, name = 'dispatch')
class UserLogout(APIView):
...
这是我一直用来测试当 decorators.py 函数 returns 'AnonymousUser':
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' 中的 'Current' 视图一样?
如有任何帮助,我们将不胜感激。据我所知,无法在 'decorators.py' 函数中调用 'self'。
谢谢,格雷
由于您使用的是 DRF,因此您应该使用视图的 IsAuthenticated
权限 class
from rest_framework.views import APIView
<b>from rest_framework.permissions import IsAuthenticated</b>
from rest_framework.response import Response
class MyAPIView(APIView):
<b>permission_classes = (IsAuthenticated,)</b>
def get(self, request, *args, **kwargs):
return Response({"msg": "Some message"})
我在我的 'decorators.py' 文件中创建了一个装饰器 'unauthenticated_user(view_func)',如果当前用户未通过身份验证,它会限制用户访问视图。
在 'unauthenticated_user()' 函数中,有一个条件 'request.user.is_authenticated' 如果附加到令牌的用户已通过身份验证,则该条件 return 应为真。但是,在测试此函数时,我注意到 'decorators.py' 中的 'request.user' 并不总是等于 'views.py' 中 'self.request.user' 编辑的正确值 return。相反,它通常 return 以前登录过的用户,或者 'AnonymousUser' 破坏了功能。
decorators.py:
def unauthenticated_user(view_func):
def wrapper_func(request, *args, **kwargs):
if request.user.is_authenticated:
return view_func(request, *args, **kwargs)
else:
return HttpResponse('No user logged in')
return wrapper_func
views.py:
@method_decorator(unauthenticated_user, name = 'dispatch')
class UserLogout(APIView):
...
这是我一直用来测试当 decorators.py 函数 returns 'AnonymousUser':
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' 中的 'Current' 视图一样?
如有任何帮助,我们将不胜感激。据我所知,无法在 'decorators.py' 函数中调用 'self'。
谢谢,格雷
由于您使用的是 DRF,因此您应该使用视图的 IsAuthenticated
权限 class
from rest_framework.views import APIView
<b>from rest_framework.permissions import IsAuthenticated</b>
from rest_framework.response import Response
class MyAPIView(APIView):
<b>permission_classes = (IsAuthenticated,)</b>
def get(self, request, *args, **kwargs):
return Response({"msg": "Some message"})