J'essaie d'utiliser fetch
dans React Native pour récupérer des informations de l'API Product Hunt. J'ai obtenu le jeton d'accès approprié et je l'ai enregistré dans State, mais je ne semble pas pouvoir le transmettre dans l'en-tête d'autorisation pour une demande GET.
Voici ce que j'ai jusqu'à présent:
var Products = React.createClass({
getInitialState: function() {
return {
clientToken: false,
loaded: false
}
},
componentWillMount: function () {
fetch(api.token.link, api.token.object)
.then((response) => response.json())
.then((responseData) => {
console.log(responseData);
this.setState({
clientToken: responseData.access_token,
});
})
.then(() => {
this.getPosts();
})
.done();
},
getPosts: function() {
var obj = {
link: 'https://api.producthunt.com/v1/posts',
object: {
method: 'GET',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + this.state.clientToken,
'Host': 'api.producthunt.com'
}
}
}
fetch(api.posts.link, obj)
.then((response) => response.json())
.then((responseData) => {
console.log(responseData);
})
.done();
},
L'attente que j'ai pour mon code est la suivante:
- Tout d'abord, je vais
fetch
un jeton d'accès avec les données de mon module API importé - Après cela, je définirai la
clientToken
propriété dethis.state
pour qu'elle égale le jeton d'accès reçu. - Ensuite, je vais exécuter
getPosts
ce qui devrait renvoyer une réponse contenant un tableau des publications actuelles de Product Hunt.
Je suis en mesure de vérifier que le jeton d'accès est reçu et qu'il le this.state
reçoit comme sa clientToken
propriété. Je suis également en mesure de vérifier que cela getPosts
est en cours d'exécution.
L'erreur que je reçois est la suivante:
{"error": "unauthorized_oauth", "error_description": "Veuillez fournir un jeton d'accès valide. Reportez-vous à la documentation de notre API pour savoir comment autoriser une demande d'API. Veuillez également vous assurer que vous avez besoin des bonnes étendues. Par exemple, \" public privé \ "pour accéder aux points de terminaison privés."}
Je suis parti de l'hypothèse que je ne transmettrais pas correctement le jeton d'accès dans mon en-tête d'autorisation, mais je ne semble pas être en mesure de comprendre exactement pourquoi.
la source
Réponses:
Exemple de récupération avec en-tête d'autorisation:
la source
'Authorization'
tête ne parvient pas silencieusement à se connecter par firebug. J'ai même essayé d'inclurecredentials: 'include'
dans l'objet optionnel.new Headers()
Il s'avère que j'utilisais la
fetch
méthode de manière incorrecte.fetch
attend deux paramètres: un point de terminaison pour l'API et un objet facultatif qui peut contenir un corps et des en-têtes.J'emballais l'objet prévu dans un deuxième objet, ce qui ne m'a pas donné le résultat souhaité.
Voici à quoi cela ressemble à un niveau élevé:
J'ai structuré mon objet comme tel:
la source
401
réponse./
à la fin qu'il me manquait ...J'ai eu ce problème identique, j'utilisais django-rest-knox pour les jetons d'authentification. Il s'avère que rien n'allait mal avec ma méthode de récupération qui ressemblait à ceci:
J'utilisais Apache.
Que résolu ce problème pour moi était de changer
WSGIPassAuthorization
à'On'
enwsgi.conf
.J'avais une application Django déployée sur AWS EC2 et j'ai utilisé Elastic Beanstalk pour gérer mon application, donc dans le
django.config
, j'ai fait ceci:la source
la source