Ich versuche, fetch
in React Native Informationen aus der Product Hunt-API abzurufen. Ich habe das richtige Zugriffstoken erhalten und im Status gespeichert, kann es jedoch anscheinend nicht im Autorisierungsheader für eine GET-Anforderung weitergeben.
Folgendes habe ich bisher:
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();
},
Die Erwartung, die ich an meinen Code habe, ist folgende:
- Zuerst werde ich
fetch
ein Zugriffstoken mit Daten aus meinem importierten API-Modul erstellen - Danach setze ich die
clientToken
Eigenschaft von sothis.state
, dass sie dem empfangenen Zugriffstoken entspricht. - Dann werde ich ausführen,
getPosts
was eine Antwort zurückgeben sollte, die eine Reihe aktueller Beiträge von Product Hunt enthält.
Ich kann überprüfen, ob das Zugriffstoken empfangen wird und ob this.state
es als seine clientToken
Eigenschaft empfangen wird . Ich kann auch überprüfen, ob das ausgeführt getPosts
wird.
Der Fehler, den ich erhalte, ist folgender:
{"error": "unauthorized_oauth", "error_description": "Bitte geben Sie ein gültiges Zugriffstoken an. Informationen zum Autorisieren einer API-Anfrage finden Sie in unserer API-Dokumentation. Stellen Sie außerdem sicher, dass Sie die richtigen Bereiche benötigen. Beispiel:" private public \ " "für den Zugriff auf private Endpunkte."}
Ich habe die Annahme getroffen, dass ich das Zugriffstoken in meinem Autorisierungsheader irgendwie nicht richtig weitergebe, aber anscheinend nicht genau herausfinden kann, warum.
quelle
Antworten:
Beispielabruf mit Berechtigungsheader:
quelle
'Authorization'
Header kann laut Firebug nicht automatisch angehängt werden. Ich habe sogar versucht,credentials: 'include'
in das optionale Objekt aufzunehmen.new Headers()
Es stellte sich heraus, dass ich die
fetch
Methode falsch angewendet habe.fetch
erwartet zwei Parameter: einen Endpunkt für die API und ein optionales Objekt, das Body und Header enthalten kann.Ich wickelte das beabsichtigte Objekt in ein zweites Objekt ein, was mir kein gewünschtes Ergebnis brachte.
So sieht es auf hohem Niveau aus:
Ich habe mein Objekt so strukturiert:
quelle
401
Antwort erhalte./
am Ende, dass ich vermisst wurde ...Ich hatte dieses identische Problem, ich verwendete Django-Rest-Knox für Authentifizierungstoken. Es stellt sich heraus, dass an meiner Abrufmethode, die so aussah, nichts falsch war:
Ich habe Apache ausgeführt.
Was dieses Problem für mich löste, war der Wechsel
WSGIPassAuthorization
zu'On'
inwsgi.conf
.Ich hatte einen Django - App auf AWS EC2 eingesetzt, und ich Elastic Beanstalk meine Anwendung zu verwalten, so in der
django.config
ich dies tat:quelle
quelle