Django Simple JWT + Axios, всегда получаю 401. Как я могу это исправить?

Я использую Nuxt и хранилище pinia для хранения токена (токен присутствует в хранилище). Я создал плагин для Axios следующим образом:

import axios from "axios";

export default defineNuxtPlugin((NuxtApp) => {
  axios.defaults.baseURL = "http://127.0.0.1:8000/api/";
  axios.defaults.withCredentials = false;
  axios.defaults.proxyHeaders = false;
  if (process.client) {
    let token = window.localStorage.getItem("authTokens");
    if (token) {
      token = JSON.parse(token);
      console.log(token.access);
      axios.defaults.headers.common["Authorization"] = `Bearer ${token.access}`;
    }
  }
  return {
    provide: {
      axios: axios,
    },
  };
});

Конечная точка в Django REST Framework определяется следующим образом:

class CreateEvent(CreateAPIView):
    permission_classes = [IsAuthenticated]
    serializer_class = CreateEventSerializer

    def post(self, request, *args, **kwargs):
        data = request.data.copy()
        z = request.META.get('HTTP_AUTHORIZATION')
        data['creator'] = request.user
        print(request.user, '--------------------')
        data['types'] = get_type_by_int(request.data.get('type', None))
        serializer = self.get_serializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

Метод, который я использую для вызова этой конечной точки, выглядит следующим образом:

async sendEvent(): Promise<void> {
  try {
    const { $axios } = useNuxtApp();
    const response = await $axios.post("event/create/", {
      latitiude: this.latitiude,
      longitude: this.longitude,
      description: this.description,
      type: this.type,
    });
    console.log("Event sent:", response.data);
  } catch (error) {
    console.error("Error while sending event");
  }
}

Независимо от того, что я делаю, я продолжаю получать ошибку 401 с сообщением: Учетные данные для аутентификации не были предоставлены. Однако строка z = request.META.get('HTTP_AUTHORIZATION') содержит значение.

Вот мои настройки DRF:

SIMPLE_JWT = {
    "ACCESS_TOKEN_LIFETIME": timedelta(minutes=15),
    "REFRESH_TOKEN_LIFETIME": timedelta(days=1),
    "TOKEN_OBTAIN_SERIALIZER": "account.utils.MyTokenObtainPairSerializer",
}

REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES": (
        "rest_framework_simplejwt.authentication.JWTAuthentication",
    )
}

INSTALLED_APPS = [
    ...
    "rest_framework",
    "rest_framework_simplejwt",
    "corsheaders",
    "drf_yasg",
    ...
]

Что может быть причиной этой проблемы и как ее решить?

Я пробовал менять токен на Bearer и без него, редактировать конечную точку, делать запросы на этот адрес с помощью Postman и изменять настройки simple_jwt. Я знаю, что токен отправляется, потому что если я изменяю его структуру, даже если токен новый, я получаю следующую ошибку: { «detail»: «Данный токен не подходит ни для одного типа токенов», „code“: «token_not_valid», „messages“: [ { «token_class»: «AccessToken», „token_type“: «access», „message“: «Токен недействителен или истек» } ] }

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