【问题标题】:Why isn't Django Rest Framework Token Authentication working?为什么 Django Rest Framework 令牌身份验证不起作用?
【发布时间】:2021-11-24 16:08:36
【问题描述】:

我目前正在使用 Django rest 框架并尝试实现令牌身份验证系统。目前,我的 settings.py 如下所示:

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

rest_framework.authtoken 在 installed_apps 中。

我的 urls.py 看起来像这样:

urlpatterns = [
    ...
    url('^v1/users/$', views.users_view),
    ...
]

我的 views.py 看起来像这样:

@authentication_classes((TokenAuthentication,))
@api_view(['PUT', 'POST'])
def users_view(request):
...

我正在使用 postman 测试 API,无论我是否将令牌放在授权字段中,API 都会按预期工作。我需要更改什么才能使令牌身份验证按预期工作?

更新: Reqbin 也为我提供了相同的功能,所以我认为这不是邮递员的问题。

【问题讨论】:

  • 我可以通过使用基于类的视图来解决这个问题,但最初的问题没有得到解决。
  • 看来我并不孤单。经过大量的谷歌搜索和研究,我相信这是 Django 中的一个错误,其中一些身份验证器无法与基于函数的视图一起正常工作。谁能证实这一点?如果是这样,我会写一个答案并将其标记为正确。

标签: python django authentication django-rest-framework django-views


【解决方案1】:

您还需要添加权限类。

@authentication_classes((TokenAuthentication,))
@permission_classes((IsAuthenticated,))
@api_view(['PUT', 'POST'])
def users_view(request):
...

【讨论】:

  • 无论有没有令牌,它仍然有效。
  • 你如何测试这个?使用邮递员?
  • 我通过调用端点同时运行 put 和 post 方法。我将发布数据放在正文请求的表单字段中,并使用不记名令牌授权字段测试令牌。
【解决方案2】:

似乎 Django 中存在一个错误,不允许某些身份验证与基于函数的视图一起使用。我可以确认它不适用于 TokenAuthentication 并且需要使用基于类的视图。

【讨论】:

    猜你喜欢
    • 2015-12-15
    • 1970-01-01
    • 2021-05-22
    • 2019-01-18
    • 2020-09-12
    • 2019-05-18
    • 2019-02-20
    • 2021-07-01
    • 2018-03-25
    相关资源
    最近更新 更多