2017-04-10 4 views
1

Szenario Handling:Runtime Error nach 400

Der Benutzername und das Passwort authentifiziert wird WebAPI 2 Token-Authentifizierung. Wenn die Anmeldeinformationen korrekt sind, wird das Token zurückgegeben. Wenn die Anmeldeinformationen jedoch falsch sind, wird 400 ungültige Anforderung zurückgegeben. Wenn ich die Antwort in meinem Ionic 2-Projekt erhalte, navigiere ich zur nächsten Seite. Wenn ich den Fehler erhalte, zeige ich meine benutzerdefinierte Fehlermeldung.

Ausgabe:

Das Problem, das ich bin Bewurf ist, wenn ich die falschen Anmeldeinformationen zum ersten Mal eingeben, die benutzerdefinierte Fehlermeldung angezeigt. Wenn ich die falschen Anmeldeinformationen erneut eingabe, wird die benutzerdefinierte Fehlermeldung zusammen mit der ionischen Fehlermeldung angezeigt.

Hier ist mein Code:

login.ts

doLogin() { 
    if (this.Username !== undefined && this.Password !== undefined) { 
     this.loading.present(); 
     this.authSrv.login(this.Username, this.Password).subscribe(data => { 
     this.navCtrl.setRoot('HomePage'); 
     this.loading.dismiss(); 
     }, (err) => { 
     this.errorMsg("Invalid Username/Password !" + err); 
     this.loading.dismiss(); 
     }); 
    } 
    else 
     this.errorMsg("Please enter Username/Password"); 
    } 

Auth-service.ts

login(username, password) { 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/x-www-form-urlencoded'); 
    let urlSearchParams = new URLSearchParams(); 
    urlSearchParams.append('username', username); 
    urlSearchParams.append('password', password); 
    urlSearchParams.append('grant_type', 'password'); 
    let body = urlSearchParams.toString() 
    return this.http.post('http://' + this._api + '/postoken', body, { headers: headers } 
    ) 
     .map(res => res.json()) 
     .map((res) => { 
     if (res !== null) { 
      localStorage.setItem('acess_token', res["access_token"]); 
      localStorage.setItem('access_type', res["access_type"]); 
      localStorage.setItem('expires_in', res["expires_in"]); 
      this.loggedIn = true; 
     } 
     return res; 
     }); 
    } 

Screen:

enter image description here

Fehler

enter image description here

Jede Beratung wäre hilfreich.

Antwort

3

LoadingController kann nur einmal aufgerufen werden.

Beachten Sie, dass nach dem Ablehnen der Komponente, es nicht mehr verwendbar ist und ein anderes erstellt werden muss.

Dies verursacht die Ausnahme. Sie sollten jedes Mal ein neues Laden in doLogin erstellen.

doLogin() { 
    if (this.Username !== undefined && this.Password !== undefined) { 
     this.loading = this.loadingCtrl.create({ //create here 
    content: 'Please wait...' 
    }); 
     this.loading.present(); 
     this.authSrv.login(this.Username, this.Password).subscribe(data => { 
     this.navCtrl.setRoot('HomePage'); 
     this.loading.dismiss(); 
     }, (err) => { 
     this.errorMsg("Invalid Username/Password !" + err); 
     this.loading.dismiss(); 
     }); 
    } 
    else 
     this.errorMsg("Please enter Username/Password"); 
    } 
+0

Dank @suraj, das löste mein Problem. –

+0

froh, dass es gelöst ist :) –

+0

Hey @suraj, woher wusstest du, dass das Problem in 'Loading' aus dem angegebenen Code in der Frage war? Ich verstehe es einfach nicht. Weil er das Laden dort nicht erstellt hat und mehrere Logins auf derselben Seite gemacht hat? Ist es das? –

Verwandte Themen