Allauth request.user 在 APIView 中是 AnonymousUser,但在 View 中是 is_authenticated
Allauth request.user is AnonymousUser in APIView, but is_authenticated in View
我进行了这个测试:
class IsAuthenticatedView(APIView):
def get(self, request):
print(request.user)
return Response({
"is_authenticated": "true" if request.user.is_authenticated else "false"
}, 200)
和
class IsAuthenticatedView(View):
def get(self, request):
print(request.user)
return Response({
"is_authenticated": "true" if request.user.is_authenticated else "false"
}, 200)
由于 AssertionError,第二个未能正确加载。但是,request.user 在这两者之间发生了变化,其中 APIView 打印 AnonymousUser,第二个打印实际登录的用户。
我正在使用 Facebook 登录验证。
您可以直接尝试 request.user.is_authenticated。为什么要在 api view 和 view 中尝试呢?请解释。
编辑:
好的。实际上你必须先使用 request.user.is_authenticated 然后才使用 request.user
是的,不需要在 is_authenticated 中添加 () 因为它在 django 1.11 中不再是一个函数。它是一个属性。
把答案放在这里是因为评论看起来很乱:
你在设置里设置了DEFAULT_AUTHENTICATION_CLASSES
了吗?你可能想要这个:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
)
}
取自here
我进行了这个测试:
class IsAuthenticatedView(APIView):
def get(self, request):
print(request.user)
return Response({
"is_authenticated": "true" if request.user.is_authenticated else "false"
}, 200)
和
class IsAuthenticatedView(View):
def get(self, request):
print(request.user)
return Response({
"is_authenticated": "true" if request.user.is_authenticated else "false"
}, 200)
由于 AssertionError,第二个未能正确加载。但是,request.user 在这两者之间发生了变化,其中 APIView 打印 AnonymousUser,第二个打印实际登录的用户。
我正在使用 Facebook 登录验证。
您可以直接尝试 request.user.is_authenticated。为什么要在 api view 和 view 中尝试呢?请解释。
编辑: 好的。实际上你必须先使用 request.user.is_authenticated 然后才使用 request.user 是的,不需要在 is_authenticated 中添加 () 因为它在 django 1.11 中不再是一个函数。它是一个属性。
把答案放在这里是因为评论看起来很乱:
你在设置里设置了DEFAULT_AUTHENTICATION_CLASSES
了吗?你可能想要这个:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
)
}
取自here