2016-10-26 7 views
1

У меня есть простое приложение, подключенное к firebase. При входе в систему я просто хочу перенаправить пользователя на страницу своего профиля. Однако по какой-то нечетной причине перенаправление не происходит.Угловой 2.0 Router.navigate не перенаправляется после входа в систему

У меня есть here, который похож на аналогичную проблему, но, к сожалению, там нет решения.

Изменение перенаправления на другую страницу (у которой нет охранника), похоже, работает, поэтому я думаю, проблема в том, что я просто не знаю, как ее исправить.

Вот мой код, когда пользователь подписывается в нем вызывает мое обслуживание:

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

И мой 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 
    } 

Вот мой 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); 

И здесь является моим auth.guard.ts

@Injectable() 
export class AuthGuard implements CanActivate { 
    constructor(private authService: AuthService) {} 

    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean { 
     return this.authService.isAuthenticated().first(); 
    } 
} 

Полный проект находится на github, если вам нужно проверить другую конфигурацию.

+0

есть ли у вас какие-либо ошибки на консоли? – Sefa

+0

@ SefaÜmitOray абсолютно ничего, консоль все чистая. Единственное немного странное, что если я повторно нажму кнопку «войти», он перенаправляется, но только при второй попытке – gudthing

+0

@ SefaÜmitOray. Что это значит, когда вы вошли в систему? 'canActivate (маршрут: ActivatedRouteSnapshot, state: RouterStateSnapshot): Наблюдается | boolean { return this.authService.isAuthenticated(). first(); } ' –

ответ

0

Наконец-то выяснилось! Я был близок, но, как указал Ян в своем ответе, навигация произошла незамедлительно, прежде чем была установлена ​​регистрация и аутентификация. Нажимая на .then, я смог выполнить операцию, как только пользователь был создан.

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

Ваш метод auth или signInWithEmailAndPassword, вероятно, возвращает Observable, поэтому они задерживаются. Навигация по маршрутизатору происходит немедленно. Попробуйте включить его в вызов subscribe().