Попытка получить токен доступа с помощью django-oauth-toolkit с использованием fetch не работает при работе с jquery
Я пытаюсь вызвать конечную точку для генерации токена доступа с помощью oauth в django, она работает, когда я вызываю конечную точку с помощью jquery, но не работает, когда я пытаюсь вызвать ее с помощью fetch
вот код для fetch
fetch(`https://<domain>/o/token/`, {
method: 'POST',
body:{
grant_type:'password',
client_id: "<client-id>",
client_secret:"<client-secret>",
username:"<username>",
password:"<password>"
}
})
.then(res => res.json())
.then(res => {console.log(res)});
вывод будет
{error: 'unsupported_grant_type'}
В то же время, когда я вызываю его с помощью jquery ajax, как показано ниже, он работает
$.post({
url:'https://<domain>/o/token/',
data:{
grant_type:'password',
client_id: "<client-id>",
client_secret:"<client-secret>",
username:"<username>",
password:"<password>"
},
success: function(data){
console.log(data);
}
})
вывод будет
{access_token: '<access-token>', expires_in: 3600, token_type: 'Bearer', scope: 'read write groups', refresh_token: '<refresh-token>'}
Я нашел исправление на случай, если кто-то столкнулся с той же проблемой
в jquery ajax, как в следующем блоке кода, он преобразует объект словаря в строку запроса
var data = "";
for (var x in option.data) {
if (data != "") {
data += "&";
}
data += encodeURIComponent(x)+"="+encodeURIComponent(option.data[x]);
};
option.data = data;
и устанавливает заголовок content-type в
'application/x-www-form-urlencoded; charset=UTF-8'
Итак, правильный код fetch, который будет работать как вызов jquery ajax, будет выглядеть следующим образом
fetch(`https://<domain>/o/token/`, {
method: 'POST',
headers: {
"Content-Type": 'application/x-www-form-urlencoded; charset=UTF-8'
},
body:'grant_type=password&client_id=<client-id>&client_secret=<client-secret>&username=<username>&password=<password>'
})
.then(res => res.json())
.then(res => {console.log(res)});