Angular 2: как перенаправить пользователя на предыдущий URL-адрес после входа в систему

Я использую шаблон ABP Angular. Я ищу способ перенаправить пользователя на URL-адрес, который он запросил изначально после аутентификации. Например, если пользователь поместил localhost: 4200 / app / plan / 1, который разрешает только аутентифицированных пользователей, тогда фреймворк перенаправляет пользователя на страницу входа, и когда пользователь проходит аутентификацию, автоматически перенаправляется на адрес, запрошенный ранее. В данный момент пользователь перенаправляется на домашний компонент

Почему initialUrl в login.service.ts всегда «localhost: 4200»?

var initialUrl = UrlHelper.initialUrl;
    if (initialUrl.indexOf('/login') > 0) {
        initialUrl = AppConsts.appBaseUrl;
    }
    location.href = initialUrl;

Вам достаточно нажатия кнопки возврата с помощью кода, не так ли?

Raja Mohamed 08.05.2018 09:29

@aaron, есть идеи, почему для аутентификации пользователь сначала перенаправляется на localhost: 4200, а затем на страницу входа? Вот почему intitialUrl всегда localhost: 4200 и потерял фактический запрошенный URL.

Mohammad Shadmehr 08.05.2018 11:04
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
2
534
2

Ответы 2

Попробуйте этот код

import {Location} from '@angular/common';

constructor(private location :Location){}

loginAction(){
     //Do login request 

     //Login Success callback
     this.location.back();
     //Login Failed callback
     Do nothing
}

который все еще перенаправляет меня на localhost: 4200!

Mohammad Shadmehr 08.05.2018 10:00

ДЛЯ УГЛОВОГО 7+

На самом деле, начиная с Angular 7.2, нет необходимости использовать службу для сохранения предыдущего URL-адреса. Вы можете просто использовать объект состояния, чтобы установить последний URL-адрес перед ссылкой на страницу входа. Вот пример сценария входа в систему.

@Component({ ... })
class SomePageComponent {
  constructor(private router: Router) {}

  checkLogin() {
    if (!this.auth.loggedIn()) {
      this.router.navigate(['login'], { state: { redirect: this.router.url } });
    }
  }
}
@Component({...})
class LoginComponent {
  constructor(private router: Router) {}

  backToPreviousPage() {
    const { redirect } = window.history.state;

    this.router.navigateByUrl(redirect || '/homepage');
  }
}
----------------

Кроме того, вы также можете передать данные в шаблоне:

@Component({
  template: '<a routerLink = "/some-route" [state] = "{ redirect: router.url }">Go to some route</a>'
})
class SomePageComponent {
  constructor(public router: Router) {}
}

Другие вопросы по теме