Как отправить основные заголовки Auth в Django из Angular?

В моей службе запросов Angular есть следующее:

async login() {
var key = localStorage.getItem('access');

var httpOptions = {
  headers: new HttpHeaders({
    'Content-Type':  'application/json',
    'Authorization': 'Basic ' + btoa('username:password')
  }),      
};
return this.http.post('https://example.com/login/', httpOptions);

}

Вот мое представление Django:

from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
from rest_framework.decorators import api_view
from django.http import JsonResponse
from django.contrib.auth import authenticate, login

import base64
import basicauth
from django.contrib.auth import authenticate

@method_decorator(csrf_exempt, name='dispatch')
#@api_view(['GET', 'POST'])
def login(request, format=None):
    auth_header = request.META.get('HTTP_AUTHORIZATION', '')
    token_type, _, credentials = auth_header.partition(' ')

    toAscii = credentials.encode('ascii')
    messageBytes = base64.b64decode(toAscii)
    message = messageBytes.decode('ascii')

    user = message.split(':')[0]
    return JsonResponse({"response":user})

Когда я делаю запрос postman для Basic Auth, я получаю следующий ответ:

{
"response": "username:password"
}

Это именно то, что я хочу. С помощью запроса Angular я получаю:

item 
Object { response: "" }

Делая это с помощью Angular, я как будто вообще ничего не отправлял. HttpClient имеет забавный способ делать вещи. Я не мог получать строки запроса в Django без отправки 'Content-Type': 'application/x-www-form-urlencoded', в моих заголовках; я предполагаю, что мне нужно сделать что-то необычное и здесь. Кто-нибудь знает, как заставить это работать правильно?

Вернуться на верх