Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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框架的JWT令牌身份验证_Django_Django Rest Framework_Jwt_Axios - Fatal编程技术网

使用Django Rest框架的JWT令牌身份验证

使用Django Rest框架的JWT令牌身份验证,django,django-rest-framework,jwt,axios,Django,Django Rest Framework,Jwt,Axios,我在使用react本机前端的Django Rest应用程序上遇到了一些令牌身份验证问题。我一直使用会话身份验证,这是我第一次使用这些需求设置项目 我安装了pip- djangorestframework\u simplejwt 当我点击端点api/token 我可以在前端取回它们。我的问题发生在我尝试在后端点击列表路由时,返回的错误如下 { "detail": "Authentication credentials were not provided." } 我认为这可能是cors的问

我在使用react本机前端的Django Rest应用程序上遇到了一些令牌身份验证问题。我一直使用会话身份验证,这是我第一次使用这些需求设置项目

我安装了pip-

djangorestframework\u simplejwt

当我点击端点
api/token

我可以在前端取回它们。我的问题发生在我尝试在后端点击列表路由时,返回的错误如下

{
    "detail": "Authentication credentials were not provided."
}
我认为这可能是cors的问题,或者是我的axios请求的问题,但我相当确定它们的设置是正确的。另一个问题是我的视图集中的身份验证和权限类,我的直觉告诉我这个问题的根源

相关设置.py信息--

Viewset/Serializer/Url

class WorkoutViewSet(ModelViewSet):
    model = apps.get_model('backend', 'Workout')
    queryset = model.objects.all()
    serializer_class = serializers.WorkoutSerializer
    authentication_classes = (authentication.TokenAuthentication,)
    permission_classes = (permissions.IsAuthenticated,)

class WorkoutSerializer(serializers.ModelSerializer):
    class Meta:
        model = apps.get_model('backend', 'Workout')
        fields = ('name', 'is_complete', 'allow_copy', 'workout_goal', 'user')

router.register(r'workouts', views.WorkoutViewSet, base_name='workouts')
Axios请求

export const workouts = (token) => {
  return axios({
    method: 'get',
    url: 'http://localhost:8000/workouts',
      headers: { 'authorization': `Bearer ${token}`}
  })
} 

感谢您的帮助/指导。

在您的视图集中,您已经指定了用于设置令牌身份验证的身份验证类

这意味着,对于您的工作视图集,您指定仅使用令牌身份验证-它在标题中使用令牌前缀,因此您将获得“未提供凭据”


如果您想使用JWT令牌身份验证-您应该在此处显式设置它,或者删除它,并让默认选择的类在您的视图集中处理身份验证,您已经在设置令牌身份验证的位置指定了身份验证类

这意味着,对于您的工作视图集,您指定仅使用令牌身份验证-它在标题中使用令牌前缀,因此您将获得“未提供凭据”


如果您想使用JWT令牌身份验证,您应该在这里显式设置它,或者删除它,并让默认选择的类处理djangorest框架的身份验证,您必须使用这种格式
curl-X GEThttp://localhost:8000/workouts/ -H'授权:令牌XXXXXXXXX'
尝试
授权
(即
标题:{'Authorization':'Bearer${token}}
)如果你在apache上运行,那么你必须在
/etc/apache2/apache2.conf
中添加
WSGIPassAuthorization on
,这两种格式都不起作用。我更新了
WSGIPassAuthorization on
并使用了大写字母。对于djangorest框架,你必须使用这种格式
curl-X GEThttp://localhost:8000/workouts/-H'Authorization:Token xxxxxxxxx'
try
Authorization
(即
标题:{'Authorization':`Bearer${Token}}}
)如果您在apache上运行,那么您必须在
/etc/apache2/apache2.conf
中添加
WSGIPassAuthorization on
,感谢它,两者都不起作用。我更新了
WSGIPassAuthorization on
,并使用了大写字母。这就成功了,并从中删除了
rest\u framework.authentication.TokenAuthentication
m默认权限不应该存在。这就成功了,从默认权限中删除了
rest\u framework.authentication.TokenAuthentication
export const workouts = (token) => {
  return axios({
    method: 'get',
    url: 'http://localhost:8000/workouts',
      headers: { 'authorization': `Bearer ${token}`}
  })
}