繁体   English   中英

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

将答案放在这里,因为它看起来像评论一样混乱:

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

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

取自这里

您可以直接尝试 request.user.is_authenticated 。 为什么要在api视图和视图中尝试? 请解释。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM