#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). Это сработало для меня.