как опубликовать с использованием токена в rest-auth с помощью axios? POST http://localhost:8000/rest-auth/password/change / 401 (Несанкционированный)

#django #vue.js #post #axios #django-rest-auth

#django #vue.js #Публикация #axios #django-rest-auth

Вопрос:

Это мой код в vue,

 resetPOST(){
    var formData = new FormData();
    formData.append('old_password', this.oldPassword);
    formData.append('new_password1', this.password1);
    formData.append('new_password2', this.password2);
    axios.post('http://localhost:8000/rest-auth/password/change/',
      {headers: { 'Authorization' :  this.token },
      data: {
        old_password: this.oldPassword,
        new_password1: this.password1,
        new_password2: this.password2
      }
    })
},
  

где переменная ‘token’ имеет такое значение: bbf957d27925a860f8c678546cf0425dbf7ddf98

Я не понимаю, почему я получаю эту ошибку, если я попробую обратную часть, я ввожу старый пароль и два новых пароля, и это работает. По какой-то причине я не принимаю параметр токена.

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

Ответ №1:

Вам не хватает Bearer . Большинство фреймворков по умолчанию требуют, чтобы вы отправляли авторизацию в следующем формате: Bearer <token> .

Если вы изменили Bearer слово на другое, вы должны использовать это, но если вы оставили его по умолчанию в django-rest-auth, вы должны использовать следующее:

 axios.post('http://localhost:8000/rest-auth/password/change/',
      {headers: { 'Authorization' :  `Bearer ${this.token}` },
      data: {
        old_password: this.oldPassword,
        new_password1: this.password1,
        new_password2: this.password2
      }
    })
  

Ответ №2:

У меня была похожая проблема. Я понял, что использую тот же экземпляр axios для пользователей, вошедших в приложение, что означает использование токена аутентификации. Конечно, если вы сбрасываете свой пароль, у вас нет аутентификации (и, следовательно, токена). Используйте другой экземпляр axios для сброса пароля следующим образом:

 const instance = axios.create({
    baseURL: Store.state.endpoints.baseUrl,
    headers: {
        'Content-Type': 'application/json'
    },
    // xhrFields: {
    //   withCredentials: true
    // },
    xsrfCookieName:"csrftoken",
    xsrfHeaderName:'X-CSRFToken'
    })
    return instance;
}
  

Обратите внимание, что токен аутентификации отсутствует, а учетные данные закомментированы (возможно, также может быть установлено значение false). Это сработало для меня.