Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django rest框架传递头时出现问题_Django_Django Rest Framework_Http Headers_Django Rest Framework Jwt_Django Rest Knox - Fatal编程技术网

django rest框架传递头时出现问题

django rest框架传递头时出现问题,django,django-rest-framework,http-headers,django-rest-framework-jwt,django-rest-knox,Django,Django Rest Framework,Http Headers,Django Rest Framework Jwt,Django Rest Knox,我正在尝试将令牌传递到后端,但遇到一些问题 当我在cmd中写这篇文章时: curl -H "Authorization: Token 3c9c6079602737a04fcb6b2e737804142ef93930e4e705c0598b2fc597759f7f" http://127.0.0.1:8000/api/auth/user/ 我得到了我想要的用户 但是,当我从邮递员/前端发送请求时,会出现以下错误: { "detail": &qu

我正在尝试将令牌传递到后端,但遇到一些问题

当我在cmd中写这篇文章时:

curl -H "Authorization: Token 3c9c6079602737a04fcb6b2e737804142ef93930e4e705c0598b2fc597759f7f"  http://127.0.0.1:8000/api/auth/user/

我得到了我想要的用户

但是,当我从邮递员/前端发送请求时,会出现以下错误:

{
    "detail": "Authentication credentials were not provided."
}
这是我在前端的服务

const config = {headers: {Authorization: `Token ${token}`}}

async function query() {
    try { 
        return await axios.get(`http://127.0.0.1:8000/api/${types.TODO_API}/`, null, config);
    } catch (err) {
        throw err;
    };
};
当我发送req时,在XHR网络中,我在查询字符串参数中看到它,如下所示:
标题:{“授权”:“令牌50633f123efeb7b3f122e5e3ee4e9206463dfa5b413cacca475ab9ffd743da8f”}

这是一张邮递员的照片

这是我的设置.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'corsheaders',
    'todo',
    'user',
    'knox'
]

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES':  (
        'knox.auth.TokenAuthentication',
    )
}

REST_KNOX = {
    'TOKEN_TTL': timedelta(hours=10000),
    'USER_SERIALIZER': 'knox.serializers.UserSerializer',
}

CORS_ALLOW_HEADERS = [
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
    'access-control-allow-origin',
]

CORS_ALLOW_CREDENTIALS = True
这是TodoViewSet,它也使用令牌,但除非我从cmd发送req+令牌,否则它不会工作

class TodoViewSet(viewsets.ModelViewSet):
    permission_classes = (permissions.IsAuthenticated, )
    serializer_class = TodoSerializer

    def get_queryset(self):
        return self.request.user.todo.all()

    def preform_create(self, serializer):
        serializer.save(owner = self.request.user)
下面是GetUserView

class GetUserView(generics.RetrieveAPIView):
    permission_classes = (permissions.IsAuthenticated,)    
    serializer_class = UserSerializer
    
    def get_object(self):
        return self.request.user

您可以上传授权中的内容(邮递员)并检查令牌类型是否正确。

您可以上传授权中的内容(邮递员)并检查令牌类型是否正确。

当我在axios中添加默认授权标头时,它现在起作用了:

axios.defaults.headers.common['Authorization'] = _getToken();
_getToken函数只是以这种格式从localStorage返回令牌${token}
您可以将其更改为
Bearer${token}
JWT${token}
,这样它就可以与您的JWT插件一起使用。

当我在axios中添加默认授权头时,它现在可以工作了:

axios.defaults.headers.common['Authorization'] = _getToken();
_getToken函数只是以这种格式从localStorage返回令牌${token} 您可以将其更改为
Bearer${token}
JWT${token}
,这样它就可以与您的JWT插件一起工作。

我建议使用基于JWT.io的,我建议使用基于JWT.io的