首页 > 解决方案 > request.user.is_authenticated 在 Django 休息框架中总是假的

问题描述

我在 drf 中使用 allauth 进行身份验证。我能够注册新用户并使用凭据登录。登录 api 返回响应如下:

{
 "key" : "<some token>"
}

现在我还有 1 个 API,其代码是

    from django.http import HttpResponse
    def lol(request):
        if request.user.is_authenticated:
            return HttpResponse("Authenticated")
        else:
            return HttpResponse("Not Authenticated")

但这总是返回未经过身份验证的我的 api 调用看起来像这样在此处输入图像描述

这是我的 settings.py 中已安装应用程序的列表

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework.authtoken',
'rest_auth',
'django.contrib.sites',
'allauth',
'allauth.account',
'rest_auth.registration',

'api.user',
'api.activity',
]

标签: djangopython-3.xdjango-rest-frameworkdjango-allauth

解决方案


看来您正在使用功能视图?如果是这样,您是否将@api_view装饰器添加到视图中?

如果是这样,您是否添加了authentication_classes=[TokenAuthentication]关键字参数?这对于使令牌 Auth 起作用是必要的。

要么,要么在中设置以下内容settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication'
    ]
}

推荐阅读