Antwort an „Rolf B“ verfassen

Hallo Aragorn,

schön, dass die Wiederauferstehung deines Kontos funktioniert hat 😉

Ein paar Hinweise noch

(1) Ein Forms-Login muss zwingend über https erfolgen, weil das Passwort sonst unverschlüsselt über die Leitung geht.

(2) Der Code

.then(function(sndResp) {
      notifyLogin(sndResp);
   });

lässt sich zu

.then(notifyLogin);

verkürzen. Eine Adapterfunktion ist nicht nötig.

(3) Den JSON.parse in notifyLogin kannst Du Dir sparen, wenn Du im ersten .then den Aufruf response.json() verwendest.

(4) Nach dem Login wirst Du vermutlich einiges im DOM umbauen müssen, denn nach gelungenem Login ist der User sicherlich auch für mehr berechtigt.

(5) Denk dran, dass fetch auch fehlschlagen kann. Und zwar dann, wenn der Request an sich fehlschlägt. Wenn Du eine Serverantwort erhältst, selbst mit HTTP Statuscode 50x, bekommst Du ein Response-Objekt. response.ok ist nur für Statuscodes 2xx gegeben, aber du wirfst eine Exception, wenn das nicht der Fall ist. Der throw lehnt das Promise aus dem ersten .then() ab, woraufhin Du nicht mehr in den zweiten .then() kommst. Aber du kommst auch sonst nirgends hin, du wirst im Browser-Log nur eine Meldung finden, dass Dir ein abgelehntes Promise durchgeflutscht ist.

Ans Ende der Kette gehört ein .catch().

Möglichkeit 1: direkt in startLogin

Möglichkeit 2: du gibst das Promise aus dem zweiten .then() an den Aufrufer zurück und hängst den .catch() dorthin. Das meine ich so:

startLogin(mail, pw)
.catch(function(error) {
   // handle error
});

startLogin(aMailAdr, aPassWd) {
   ...
   return fetch("serverLogin.php", { ... })
   .then(...)
   .then(...);
}

Das return steht vor fetch(), weil fetch().then().then() ein Riesenausdruck ist. Mit async/await ist das transparenter.

Welche Möglichkeit für Dich besser ist, musst Du beurteilen.

Rolf

--
sumpsi - posui - obstruxi
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen