Для аутентификации моего приложения Angular 2 я подписался на свой маршрутизатор при инициализации приложения. Я проверяю, установлен ли пользователь, если нет, я пытаюсь получить пользователя из моей службы входа в систему, если это также невозможно, я хочу перейти на страницу входа.
ngOnInit() {
this._router.changes.subscribe(
next => {
// First check if our component has a user set
if (this.loggedInUser === undefined) {
// It doesn't, let's set this user with help from our loginService
this.loggedInUser = this._loginService.getUser();
-------> I think that this is where I need to add a line like:
if the user now is logged in, finish the change that triggered this code.
// If user stil isn't set, we need to login
if (this.loggedInUser === undefined) {
// Check if the user isn't already at the login page
if (!(this._router.urlTree.contains(this._router.createUrlTree(['login'])))) {
console.log('Not authorised, redirected to login.');
this._router.navigate(['login']);
}
}
}
}
);
}
Проблема с этим решением заключается в том, что жесткие ссылки в моем приложении больше не работают.
Например: если я перехожу на localhost:8000/user/1, мое приложение инициализируется, и мое приложение получает пользователя из моего loginService. Однако он не переходит по ссылке, которую я ввел, я могу перейти к этому пользователю через меню. Я предполагаю, что мне нужно добавить строку, которая сообщает маршрутизатору, что он должен выполнить следующее действие? Возможно ли это с этой конструкцией?
Изменить: я надеюсь, что с этим объяснением проблема станет яснее: если я перейду к определенному URL-адресу, например http://aplication/users/5, срабатывает приведенный выше фрагмент кода. В большинстве случаев пользователь уже вошел в систему, и учетные данные извлекаются из службы входа в систему. Как я могу сказать маршрутизатору, что он должен просто завершить действие изменения, которое вызвало код?