Django Allauth headless Unauthorized 401 (Initial)

Я получаю 401 при попытке достичь конечной точки "/_allauth/browser/v1/auth/password/reset", хотя отправляю cookie, crsf и ключ для сброса электронной почты.

Я следую потоку сброса пароля пользователя из vuejs Frontend следующим образом:

async function sendEmailReset() {
  spin.value = true;
  try {
    const resp = await api.get("/api/email-reset/" + email.value);

    if (resp.data.status == "none") {
      error_message.value =
        "Este e-mail não existe no sistema. Faça o processo de registro novamente.";
      wrongCredentials.value = true;
      return;
    } else if (resp.data.status == "social") {
      error_message.value =
        "Este email foi cadastrado com uma conta social. Faça login com o Google.";
      wrongCredentials.value = true;
      return;
    } else {
      const response = await api.post(
        "/\_allauth/" + authClient + "/v1/auth/password/request",
        { email: email.value },
        {
          headers: { "Content-Type": "application/json" },
        }
      );
      console.log(response);
      if (response.data.status == 200) {
        sentEmail.value = true;
      } else {
        error_message.value =
          "Ocorreu um erro ao enviar o e-mail. Verifique se o e-mail está correto.";
        wrongCredentials.value = true;
      }
    }
  } catch (error) {
    console.error(error);
    error_message.value =
      error.response?.data.detail ||
      "Ocorreu um erro na conexão com o servidor. Se persistir, tente novamente mais tarde.";
    wrongCredentials.value = true;
  } finally {
    spin.value = false;
    email.value = "";
  }
}

он работает нормально и отправляет письмо с ключом на нужный адрес, с примочкой к моему фронтенду для обработки ключа и получения нового пароля: http://127.0.0.1:9000/reset/78f13dbf84b0458cb512b40e8362277e-c79vad-8024b22600b3c581b757f9e627f63847, оттуда я снова вызываю api:

const reset = async () => {
  if (password.value !== password2.value) {
    error_message.value = "As senhas não coincidem.";
    wrongCredentials.value = true;
    return;
  }
  if (password.value.length < 8) {
    error_message.value = "A senha deve ter pelo menos 8 caracteres.";
    wrongCredentials.value = true;
    return;`your text`
  }
  spin.value = true;
  try {
    console.log(p1.value);
    console.log(password.value);
    const response = await api.post(
      "/\_allauth/" + authClient + "/v1/auth/password/reset",
      {
        key: p1.value,
        password: password.value,
      },
      {
        headers: {
          "Content-Type": "application/json",
        },
      }
    );
.....  }  but I get this {
  "status": 401,
  "data": {
    "flows": [
      {
        "id": "login"
      },
      {
        "id": "signup"
      },
      {
        "id": "provider_redirect",
        "providers": [
          "google"
        ]
      },
      {
        "id": "provider_token",
        "providers": [
          "google"
        ]
      }
    ]
  },
  "meta": {
    "is_authenticated": false
  }
},

В документации это называется "401 - Unauthorized - Initial". Если я вызываю метод get на той же конечной точке, он работает нормально. Я вызываю метод из браузера-клиента и передаю в заголовках куки и токен csrf. Какую авторизацию я должен отправить, кроме csrf и значения ключа (поскольку пользователь сбрасывает забытый пароль)? Что я упускаю? Может ли кто-нибудь помочь? Я собираюсь использовать обычный django-auth только для работы с этим случаем сброса, но я хотел бы сконцентрировать весь процесс с Django-Allauth, если это возможно.

Заранее спасибо.

Хотя понятно, что вы ожидаете получить здесь 200, на самом деле это предполагаемое поведение. https://docs.allauth.org/en/latest/headless/openapi-specification/#section/Authentication-Flows. 401 сообщает вам о следующих доступных вариантах аутентификации пользователя после сброса пароля. Он облегчает вам жизнь, поскольку, имея пароль и пользователя, вы можете решить, войти ли в систему программно или всегда перенаправлять пользователя на страницу входа в систему при каждом получении 401.

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