Estoy tratando de llamar al punto final para generar un token de acceso usando oauth en django, funciona cuando llamo al punto final usando jquery pero no funciona cuando trato de llamarlo con fetch
aquí está el código para buscar
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)});la salida es
{error: 'unsupported_grant_type'}mientras que cuando lo llamo usando jquery ajax como se muestra a continuación, funciona
$.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); } })la salida es
{access_token: '<access-token>', expires_in: 3600, token_type: 'Bearer', scope: 'read write groups', refresh_token: '<refresh-token>'}He encontrado la solución en caso de que alguien haya tenido el mismo problema.
en jquery ajax como en el siguiente bloque de código, convierte el objeto del diccionario en una cadena de consulta
var data = ""; for (var x in option.data) { if (data != "") { data += "&"; } data += encodeURIComponent(x)+"="+encodeURIComponent(option.data[x]); }; option.data = data;y establece el encabezado de tipo de contenido en
'application/x-www-form-urlencoded; charset=UTF-8'por lo tanto, el código de búsqueda correcto que funcionará como la llamada jquery ajax será el siguiente
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)});