Allauth request.user是APIView中的AnonymousUser,但在View中是is_authenticated

时间:2017-08-28 04:31:05

标签: python django django-rest-framework django-allauth allauth

我进行了这项测试:

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登录验证。

2 个答案:

答案 0 :(得分:1)

在这里给出答案,因为它看起来很混乱:

您是否在设置中设置了DEFAULT_AUTHENTICATION_CLASSES?你可能想要这个:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': ( 
        'rest_framework.authentication.SessionAuthentication',
    )
}

取自here

答案 1 :(得分:0)

您可以按原样尝试request.user.is_authenticated。为什么要在api视图中查看并查看?请解释一下。

编辑: 好的。实际上,您必须首先使用request.user.is_authenticated,然后才使用request.user 是的,没有必要在is_authenticated bcoz中添加()它在django 1.11中不再是一个函数。这是一个属性。