2016-08-30 3 views
2

Я хочу перейти на другого пользователя после входа в систему.Angular2 - перенаправлять после входа в систему

я нашел в документации, что-то вроде этого должны работать на него правильно:

this.router.navigate(['/users']); 

Мой полный метод compoenent выглядит следующим образом:

// imports on top 
import { Component } from '@angular/core'; 
import { LoginService } from './login.service'; 
import { Router } from '@angular/router'; 

// method somewhere below 
login(event, username, password) { 
    event.preventDefault(); 
    let body = JSON.stringify({ username, password }); 

    this.loginService.login(body) 
     .then(res => localStorage.setItem('token', res.msg)) 
     .catch(error => this.error = error); 

    this.router.navigate(['/users']); 
} 

Однако это не перенаправляет меня. В основном маршрут остается без изменений и ошибок в консоли не обнаружено.

Что я делаю неправильно?

Редактировать: Мои маршруты выглядит следующим образом:

const appRoutes: Routes = [ 
    { path: 'login', component: LoginComponent}, 
    // users route protected by auth guard 
    { path: 'users', component: UsersComponent, canActivate: [AuthGuard] }, 
    // { path: 'user/:id', component: HeroDetailComponent }, 
    { path: '**', redirectTo: 'users' } 

]; 

Мой AuthGuard выглядит как:

export class AuthGuard implements CanActivate { 

    constructor(private router: Router) { } 

    canActivate() { 
    if (localStorage.getItem('token')) { 
     // logged in so return true 
     return true; 
    } 

    // not logged in so redirect to login page 
    this.router.navigate(['/login']); 
    return false; 
    } 
} 
+0

какие данные вы получаете в ответ от loginService.login, если оно ложно, AuthGuard предотвращает доступ пользователя к этому маршруту –

+0

Эй @AnmolMittal это объект JSON :) – Andurit

ответ

0

this.router.navigate ([ '/ пользователей']); Это должно быть названо после localStorage.setItem() внутри функции

Если он все еще не работает .then(), может вы поставите код класса в вашем сообщении, пожалуйста,

+0

Эй @Alexis Le Gall, спасибо за ваш ответ. Я согласен с тем, что для правильной работы он должен находиться внутри '. Then'. Однако это не должно влиять на изменение маршрута или нет. Это должно просто внести изменения, если он перенаправляет до или после того, как этот ответ «от службы» приходит – Andurit

+0

Ошибка может возникнуть из вашего файла маршрутизации, трудно сказать только с этой частью кода –

+0

Отредактировано и добавлено исправлено: – Andurit

2

Я был очень похожая проблема на моем post. Проблема в том, что существует задержка в аутентификации вашего пользователя, но router.navigate выполняется мгновенно. Поскольку пользовательская часть вашего сайта защищена и ваша технически еще не аутентифицирована, она не выполняет перенаправление.

Переадресацией на .then он ждет вашего входа в систему, а затем в случае успеха перенаправляет пользователя.

Попробуйте использовать это:

this.loginService.login(body) 
     .then(
      res => localStorage.setItem('token', res.msg) 
      this.router.navigate(['/users']); 
     ) 
     .catch(error => this.error = error); 
Смежные вопросы