我正在尝试在我的服务器 API 上实施基于令牌的授权。但是,当我触发查询时,它返回 {"detail": "Authentication credentials were not provided."}
我已经完成了各种帖子和 Django 文档中推荐的几乎所有设置。
在我的settings.py
中:
INSTALLED_APPS = [
'rest_framework.authtoken',
]
还有,
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
}
在我的视图文件中:
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
class UserList(generics.ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]
在我的 WSGI 的 Apache 配置文件中
WSGIPassAuthorization On
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP-AUTHORIZATION:%1]
我不知道我是否遗漏了除此之外的任何内容。令牌是使用命令行在超级用户级别预先生成的。
答案 0 :(得分:0)
您在浏览器中访问网站时看到的默认 Django Rest Framework HTML 不适用于令牌授权。这是因为您需要在发送请求时将 Authorization: Token <insert your token here>
放在标头中。这是一个问题,因为您填写的表单无法更改标题。
我建议使用 Postman(漂亮的 GUI)或 curl(命令)来测试您的 API,因为您需要编辑请求的 HTTP 标头。
答案 1 :(得分:0)
你见过this related S.O. question吗?
如果您使用的是 mod_wsgi,请省略 REWRITE 部分,将 WSGIPassAuthorization On
放在 WSGIScriptAlias
、WSGIDaemonProcess
和 WSGIProcessGroup
指令下方。刚刚让我的 Apache + mod_wsgi 配置工作,看起来像这样:
...
WSGIScriptAlias / /var/www/html/base/wsgi.py
WSGIDaemonProcess django_app python-path=/var/www/html python-home=/var/www/html/env
WSGIProcessGroup django_app
WSGIPassAuthorization On
...