2017-09-11 8 views
0

Ich habe eine React JS-Anwendung, die versucht, sich bei einer tokenbasierten API anzumelden (die ich gerade entwickle, mit Laravel 5.5 und Laravel Passport). Ich versuche, die grundlegende Anmeldung zu implementieren (Login mit einem Benutzernamen und einem Passwort, ein Token vom Server erhalten, sobald verifiziert, verwenden Sie dieses Token für zukünftige Abfragen).React JS Fetch gibt leere Antwort zurück, Postbote jedoch nicht

Der Code, den ich unter holen bin mit:

function loginApi(username, password) { 
    return fetch(loginUrl, { 
     method: 'POST', 
     headers: { 
      'Content-Type': 'application/json', 
     }, 
     body: JSON.stringify({ 
      grant_type: 'password', 
      client_id: clientId, 
      client_secret: clientSecret, 
      username: username, 
      password: password 
     }) 

    }).then(handleApiErrors) 
    .then(response => response.json) 
} 

Es lohnt sich, es ist nicht ganz komplett zu notieren, wie ich zur Zeit nur die Antwort zu bestimmen versucht, ich bin zurück zu bekommen.

Ich habe bereits die normalen Probleme gelöst, denen man begegnet, wie CORS Probleme, aber das Problem, auf das ich jetzt stoße, ist, dass die Antwort von der API nur ... leer ist. Wenn ich die Anfrage direkt auf der Registerkarte "Netzwerk" der Chrome-Entwicklungstools überprüfe, ist die Antwort leer.

dev tools 1

dev tools 2

jedoch, wenn ich die genaue gleiche Abfrage mit Postman machen, sind die Ergebnisse genau das, was ich erwarte.

postman

Was hier das Problem sein könnte? Warum würde die exakt gleiche Abfrage unterschiedliche Ergebnisse liefern?

Antwort

5

.json ist eine Funktion und muss aufgerufen werden. Versuchen Sie ..

.then(response => response.json()) 

Sie geben derzeit die .json Analysefunktion zurück.

+0

D'oh! Danke, das war es. Ich bin jedoch neugierig: Warum würde das Aufrufen dieser Funktion die Antwort vom Server ändern? Zu meiner zugegebenermaßen neuen Reaktion sollte die Antwort vom Server immer gleich sein, nein? Der einzige Unterschied ist, wie es dann von der Anwendung verstanden wird? Warum sollte die Antwort in der Registerkarte "Netzwerk" leer sein? – CGriffin

+0

@PeregrineStudios ändern Sie nicht die Serverantwort. Denken Sie daran, dass 'fetch' jetzt eine native Browser-API ist. Sie denken vielleicht über einen AJAX-Aufruf nach, den der Browser erhält und zurückgibt, aber wie Sie ihn formatieren, ist Ihr Geschäft. Bei Fetch ist die gesamte Versprechungskette Teil des API-Aufrufs. Er hat den Aufruf korrekt "geholt" (Ihre Server-Protokolle sollten dies anzeigen), wurde aber nicht in der Entwicklerkonsole angezeigt, da der Browser den Aufruf "fetch" und nicht nur die Drahtanfrage interpretiert. –

Verwandte Themen