更改身份验证程序

时间:2019-11-11 17:19:42

标签: python-3.x authentication django-rest-framework

我正在创建一个项目,然后首先构建它,我使用了https://cookiecutter-django.readthedocs.io/en/latest/的千篇一律。

这个模板对我很有用,但是现在我正在尝试为我的项目构建API,并且在身份验证过程中遇到了一些麻烦。

一切正常,但是视图通过标头中发送的令牌进行身份验证的过程。我说的观点如下:

class HelloView(APIView):
    permission_classes = (IsAuthenticated,)

    def get(self, request):
        content = {'message': 'Hello, World!'}
        return Response(content)

然后,我只对发送令牌的相应URL发出http请求,例如:

http http://127.0.0.1:8000/api/hello/ 'Authorization: Token 8b59a60cd91c29f4e2a7be54fbd6d32c7bd57377'

然后,我得到的答复是:

{
"detail": "Authentication credentials were not provided."
}

然后,如果我使用浏览器输入URL,除非我以前登录Django管理员,否则它会说相同。因此,我认为基本上发生的是身份验证过程中的一些配置问题。我已经在设置中添加了以下变量:

REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
    'rest_framework.authentication.BasicAuthentication',
    'rest_framework.authentication.SessionAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
    'rest_framework.permissions.IsAuthenticated',
]
}

但是我没有对cookiecutter模板身份验证进行任何更改,因此,正如我所说,尽管我不知道如何解决,但我认为这可能是问题所在。

我的最后一个问题是,您知道在给定权限等级的情况下如何更改身份验证的方式吗?

1 个答案:

答案 0 :(得分:1)

您希望用户使用令牌进行身份验证。因此,您需要在设置中设置令牌身份验证:

  "DEFAULT_AUTHENTICATION_CLASSES": (
        "rest_framework.authentication.TokenAuthentication",
        "rest_framework.authentication.SessionAuthentication",
        "rest_framework.authentication.BasicAuthentication",
    ),

或者,如果您只希望一个视图使用令牌身份验证,而不是所有视图都不是默认视图,则可以在视图中使用authentication_classes变量。