2017-02-21 24 views
0

Я пытаюсь перенаправить пользователя после успешного входа. Вот код:Угловая 2 не перенаправляется после входа в систему

login(event) { 

event.preventDefault(); 

this.error = ''; 
this.loading = true; 

this.authenticationService.login(this.user.email, this.user.password) 
    .subscribe(result => { 

     if (!result) { 
     this.loginError(); 
     return; 
     } 

     this.loginSuccess(); 

    }, 
    err => { 
     this.loginError(); 
    }); 

} 

Метод authenticationService.login() делает HTTP POST. Метод loginSuccess() это одна:

private loginSuccess() { 
     this.router.navigate(['/app/dashboard']); 
} 

Кажется, эта проблема что-то связано с асинхронными методами один раз, если я пытаюсь войти снова перенаправляет. Но, насколько я могу судить, router.navigate вызывается только после возвращения запроса.

Я заметил, что router.navigate() возвращает объект ZoneAwarePromisse. Если он успешно перенаправляет объект выглядит следующим образом:

__zone_symbol__state:true 
__zone_symbol__value:true 

Однако отказавший один выглядит следующим образом:

__zone_symbol__state:true 
__zone_symbol__value:false 
+0

(1) Пробовали ли вы просматривать ответы сервера на вкладке сетевого трафика в dev-среде вашего браузера? (2) Были ли вы вставлены операторы console.log() для проверки a), что функция успеха вызывается каждый раз, b) что объект результата правильно настроен во всех экземплярах и c) что функция ошибки не выполняется? Я очень заинтересован помочь вам в решении этого вопроса, пожалуйста, сообщите мне об этом. –

ответ

1

Тот факт, что ваша страница иногда перенаправляет и иногда не представляет большой интерес для меня. Поскольку он иногда перенаправляется, мы можем предположить, что на данный момент правильно отображаемый код и что проблема лежит в authenticationService.

Используйте ведение журнала консоли для тщательного изучения результатов и порядка их появления. Добавить строки, такие как: console.log('initializing login request'), console.log('success function called with result object', result), console.log('inside success function with \'this\' object, this), console.log('error function called with error', error).

Это помогает просмотреть значения переменных по мере их появления, и, что более важно, вы также можете увидеть, когда какая-либо функция не выполняется вообще ... исследуйте эти примеры более подробно!

Убедитесь, что при этом вы просматриваете вкладку «Сеть» в консоли разработчика вашего браузера. Посмотрите сообщение, которое вы отправляете, чтобы убедиться, что оно правильно отформатировано. Посмотрите на ответ. Получил ответ? Отформатирован ли он хорошо? Может ли быть ошибка синтаксического анализа? Обычно это точки, в которых мой код не работает.

В моем коде ошибка часто бывает либо сбойным ответом сервера (вообще никакого ответа), либо плохо отформатированным. Иногда сервер добавляет текст ошибки в мой JSON, и JSON становится невоспроизводимым. Это дает мне основание найти ошибку в серверном коде и что все исправляет. Или это дает мне основание проверить настройки веб-сервера, чтобы убедиться, что мой сервер не сработал или что пакеты принимаются и обрабатываются правильно.

Я обновлю этот ответ, когда узнаю больше о вашей ситуации. Удачи!

+1

authenticationService также делает HTTP-запрос, и это было проблемой. Благодаря! – fred00

+0

Нет проблем! Вот для чего это сообщество здесь :) –