J'ai besoin d'aide pour inclure le jeton dans l'en-tête lorsque je fais une demande de récupération à l'adresse ' http: // localhost: 8080/clients '.
En ce moment, je reçois ce message "HTTP 403 interdit".
Jeton d'autorisation 1234abcd
function getAllClients() {
const myHeaders = new Headers();
myHeaders.append('Content-Type', 'application/json');
return fetch('http://localhost:8080/clients', {
method: 'GET',
mode: 'no-cors',
headers: myHeaders,
})
.then(response => response.json())
.then((user) => {
console.log(user.name);
console.log(user.location);
})
.catch((error) => {
console.error(error);
});
}
getAllClients();
Avec fetch()
, vous ne pouvez pas envoyer d'en-tête Authorization
lorsque le mode no-cors
Est activé.
no-cors - Empêche la méthode d'être autre chose que HEAD, GET ou POST, et les en-têtes d'être autre chose que de simples en-têtes.
https://developer.mozilla.org/en-US/docs/Web/API/Request/mode
Que sont les en-têtes simples?
Accept
Accept-Language
Content-Language
Content-Type
Et dont la valeur, une fois extraite, a un type MIME (en ignorant les paramètres) qui est application/x-www-form-urlencoded
, multipart/form-data
Ou text/plain
https://fetch.spec.whatwg.org/#simple-header
Votre problème se situe donc dans la ligne suivante:
mode: 'no-cors',
Déposez-le simplement dans la demande de récupération et ajoutez votre en-tête Authorization
comme d'habitude.
const myHeaders = new Headers();
myHeaders.append('Content-Type', 'application/json');
myHeaders.append('Authorization', '1234abcd');
return fetch('http://localhost:8080/clients/', {
method: 'GET',
headers: myHeaders,
})
J'espère que ça aide :)
Voilà ce dont vous avez besoin:
function getAllClients() {
const myHeaders = new Headers();
/*
myHeaders.append('Content-Type', 'application/json');
since it's a get request you don't need to specify your content-type
*/
myHeaders.append('Authorization', 'Token 1234abcd');
return fetch('http://localhost:8080/clients', {
method: 'GET',
mode: 'no-cors',
headers: myHeaders,
})
.then(response => response.json())
.then((user) => {
console.log(user.name);
console.log(user.location);
})
.catch((error) => {
console.error(error);
});
}
getAllClients();
Il existe plusieurs méthodes pour définir l'en-tête dans la demande, vous pouvez consulter la documentation ici .
Voici le code mis à jour:
function getAllClients() {
const myHeaders = new Headers({
'Content-Type': 'application/json',
'Authorization': 'your-token'
});
return fetch('http://localhost:8080/clients', {
method: 'GET',
headers: myHeaders,
})
.then(response => {
if (response.status === 200) {
return response.json();
} else {
throw new Error('Something went wrong on api server!');
}
})
.then(response => {
console.debug(response);
}).catch(error => {
console.error(error);
});
}
getAllClients();