2016-10-26 6 views
1

Ich habe eine einfache Anwendung an Firebase angeschlossen. Bei der Anmeldung möchte ich den Nutzer einfach auf seine Profilseite umleiten. Aus irgendeinem seltsamen Grund findet die Umleitung jedoch nicht statt.Angular 2.0 Router.Navigate nicht Umleiten nach dem Login

Ich habe Look here das klingt wie ein ähnliches Problem, aber leider keine Lösung dort.

Ändern der Umleitung zu einer anderen Seite (eine, die keine Auth Guard hat) scheint zu arbeiten, also denke ich, das Problem ist da, ich weiß nur nicht, wie es zu beheben ist.

Hier ist mein Code, sobald sich der Benutzer in sie meinen Dienst ruft:

onLogin() { 
    this.authService.signinUser(this.loginForm.value); 
} 

Und mein auth.service.ts:

public signinUser(user: User) { 
    firebase.auth().signInWithEmailAndPassword(user.email, user.password) 
     .catch(function (error) { 
      // Handle Errors here. 
      let errorCode = error.code; 
      let errorMessage = error.message; 
      // todo 
      console.log(errorCode); 
      console.log(errorMessage); 
     }); 

     this.router.navigate(['/profile']); //not working 
     //this.router.navigate(['/']); //working 
    } 

Hier ist meine app.routing.ts

const APP_ROUTES: Routes = [ 
    { path: '', component: HomeComponent }, 
    { path: 'login', component: LoginComponent }, 
    { path: 'signup', component: SignupComponent }, 
    { path: 'profile', component: ProfileComponent, canActivate: [AuthGuard] }, 

]; 

export const routing = RouterModule.forRoot(APP_ROUTES); 

Und hier ist mein auth.guard.ts

Das vollständige Projekt ist auf github, falls Sie eine andere Konfiguration überprüfen müssen.

+0

erhalten Sie einen Fehler auf der Konsole? – Sefa

+0

@ SefaÜmitOray absolut nichts, Konsole ist alles sauber. Das einzige etwas Seltsame ist, dass wenn ich wieder auf den "Anmelden" -Button klicke, es umleiten wird, aber nur beim zweiten Versuch. – gudthing

+0

@ SefaÜmitOray Was gibt das zurück, wenn Sie eingeloggt sind? 'canActivate (Route: ActivatedRouteSnapshot, Status: RouterStateSnapshot): Observable | boolean { Rückgabe this.authService.isAuthenticated(). first(); } ' –

Antwort

0

Endlich herausgefunden! Ich war nahe dran, aber wie Jan in seiner Antwort sagte, passierte die Navigation sofort, bevor die Anmeldung und die Authentifizierung eingerichtet wurden. Durch Tippen auf .then konnte ich die Operation ausführen, nachdem der Benutzer erstellt wurde.

firebase.auth().createUserWithEmailAndPassword(user.email, user.password) 
     .then(success => { 
      this.router.navigate(['/profile']); 
     }) 
     .catch(function (error) {...} 
0

Ihre auth oder signInWithEmailAndPassword Methode gibt wahrscheinlich Observable zurück, so dass sie verzögert sind. Die Router-Navigation erfolgt sofort. Versuchen Sie, es in subscribe() Anruf aufzunehmen.

Verwandte Themen