Нет заголовка «Авторизация», как получить доступ к заголовку авторизации? Джанго

#django #django-middleware

Вопрос:

Мне нужно проверять HTTP-заголовок авторизации каждого входящего запроса.

Сначала я внедрил промежуточное программное обеспечение. Теперь на веб-сайте в devtools (когда я что-то публикую) я вижу заголовок авторизации с токеном.

 class MyMiddleware:   def __init__(self, get_response):  self.get_response = get_response   def __call__(self, request):  user_id = request.POST.get('created_by', False)  try:  api_token = CustomUser.objects.get(user=user_id).api_token   except MyUser.DoesNotExist:  api_token = ''  response = self.get_response(request)  response['Authorization'] = "Bearer "   api_token   return response    class MyApiView(mixins.ListModelMixin, viewsets.GenericViewSet):  queryset = Event.objects.all()  serializer_class = EventSerializer  @action(methods=['POST'], detail=False)  def post(self, request):  print(request.META['HTTP_AUTHORIZATION']) **#keyerror**  print(request.META['Authorization']) **#keyerror**  print(request.headers.items()) **#no authorization header**  tutorial_serializer = MyApiSerializer(data=request.data)  if tutorial_serializer.is_valid():  tutorial_serializer.save()  return Response(tut`enter code here`orial_serializer.data, status=status.HTTP_201_CREATED)  return Response(tutorial_serializer.errors, status=status.HTTP_400_BAD_REQUEST)  

Комментарии:

1. Вы уверены, что передаете Authorization заголовок в своем запросе? Какой веб-сервер (nginx/Apache) вы используете?

Ответ №1:

Вы присваиваете заголовок неправильной сущности. Вместо добавления заголовка в ответ (то, что Django вернет клиенту), вам нужно добавить его в заголовки запроса:

 from django.utils.deprecation import MiddlewareMixin   class CustomHeaderMiddleware(MiddlewareMixin):   def process_request(self, request):  user_id = request.POST.get('created_by', False)  try:  api_token = CustomUser.objects.get(user=user_id).api_token  except CustomUser.DoesNotExist:  api_token = ''  request.META['HTTP_Authorization'] = "Bearer "   api_token  response = self.get_response(request)  return response