2017-01-22 6 views
1

Ich versuche, ein Open-Auth-ähnliches System zu erstellen, wo der Benutzer sich über einen anderen in einer App anmelden kann.Django Server scheint nicht in der Lage zu sein, während der Anfrage zu antworten

Während dieses Vorgangs sendet meine App "authentication" heimlich ein Token an die App "client". Dann ruft die Client-App die Authentifizierungs-App an und fragt nach den Benutzerdetails, um zu überprüfen, ob sie sich geändert haben. Abschließend antwortet die Authentifizierungs-App mit den Benutzerdetails und der Benutzer wird zur Client-App umgeleitet und mit dem Token als Passwort angemeldet.

All dies scheint auf meiner lokalen Maschine gut zu funktionieren. Wenn sie jedoch auf meinen öffentlichen Server übertragen werden, gehen die Dinge schief.

Es sieht so aus, als ob die Authentifizierungsanwendung nicht nach Benutzerdetails gefragt werden kann, während sie immer noch auf eine Antwort von der Client-App wartet, die bestätigen soll, dass das Token festgelegt wurde.

Im Grunde wartet die Client-App darauf, dass die Authentifizierungsanwendung auf ihre Anforderung nach Details antwortet, was sie nie tut. Daher antwortet die Client-App niemals der Authentifizierungsanwendung, dass das Token erfolgreich eingerichtet wurde. Daher kann die Anfrage niemals erfolgreich sein. Dies ist der grobe Zeitplan

AUTH : Posts token to client, waits for 200 response 
CLIENT : Receive token, asks for user details, waits for 200 response 
AUTH : Still waiting for its 200 response, so doesn't answer client request. After a while, ends in a 504 gateway timeout error 

Soll ich den Code ändern, so dass einige Anrufe asynchron gemacht werden? Oder identifiziere ich das Problem falsch?

+1

Es kann möglicherweise sein, weil der Webserver Ihres Djangos im Einzelarbeiter läuft (Einzelprozess). Welchen Webserver benutzen Sie? Apache? Nginx? Hast du eine Möglichkeit, die Anzahl der Arbeiter für Django zu überprüfen und möglicherweise zu ändern? – Fian

Antwort

1

Wenn Sie nur einen Worker haben, ist der Worker damit beschäftigt, die äußere Anforderung zu bearbeiten. Daher wird die innere Anforderung niemals eine Antwort erhalten.

+0

Das scheint es zu sein! Ich habe den Code neu geschrieben, um zu vermeiden, auf eine Antwort zu warten, und die Dinge funktionieren jetzt gut. – Brachamul

Verwandte Themen