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