this.router.navigate возвращает false - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь перенаправить пользователя на предыдущую дорогу после того, как он успешно вошел в систему.

Мой auth.guard.ts

    const currentUser = this.authenticationService.currentUserValue;
    if (currentUser) {
      // logged in so return true
      return true;
    }

    // not logged in so redirect to login page with the return url
    this.router.navigate(['/login'], {queryParams: {returnUrl: state.url}});
    return false;

устанавливает правильный returnUrl

Тогда мой login.component.ts

[...]
// get return url from route parameters or default to '/'
    this.route.queryParams
      .subscribe(params => {
        this.returnUrl = params['redirectUrl'] || '/'
        console.log(this.returnUrl)
        console.log(params)
      } );

[...]

this.authenticationService.login(this.f.email.value, this.f.password.value)
      .pipe(first())
      .subscribe(
        data => {
          //TODO: navigate returns false
         this.router.navigate([this.returnUrl]).then(nav => {
           console.log(nav); // true if navigation is successful
         }, err => {
           console.log(err) // when there's an error
         });
        },
        error => {
          this.spinner = false;
          this.submitted = false;
          this.invalid = true;
          this.loading = false;
        },
        () => {
          this.spinner = false;
          this.submitted = false;
        });

Здесь навигация возвращает false и больше ничего не делает. Я пытался увидеть, если this.returnUrl установлен правильно, и это действительно так. Так что я не знаю, что может вызвать проблему. Если я установлю this.router.navigate ['/ что-то'], то он будет работать нормально.

1 Ответ

0 голосов
/ 11 января 2020

login.component.ts

In ngOnInit ()

this.route.queryParams.subscribe(
   params => (this.returnUrl = params.return || '/')
);

Тогда

this.authenticationService.login(this.f.email.value, this.f.password.value)
      .pipe(first())
      .subscribe(
        data => {
         this.router.navigate([this.returnUrl]);
        },
        error => {
          this.spinner = false;
          this.submitted = false;
          this.invalid = true;
          this.loading = false;
        } 
     });

Здесь вы использовали returnUrl в качестве запросаПарам

this.router.navigate(['/login'], {queryParams: {returnUrl: state.url}});

Но вы пытаетесь получить redirectUrl

params['redirectUrl']

Изменить params['redirectUrl'] на params['returnUrl']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...