Я создаю систему аутентификации в angular2 с идеей, что если пользователь, который не прошел аутентификацию, пытается перейти к «защищенному» URL-адресу, система перенаправит пользователя на страницу входа в систему, url параметр запроса, называемый «следующий», который поможет системе входа в систему перенаправить пользователя обратно туда, где он хотел быть в первую очередь.Angular2 Redirect After Login
login?next=my-redirect-url
Для защиты своих компонентов, я использую декоратор @CanActivate(isUserAuthenticated)
во всех из них. isUserAuthenticated
функция что-то выглядит следующим образом:
function isUserAuthenticated(
prevInstr: ComponentInstruction,
nextInstr: ComponentInstruction
): boolean {
const authService = injector.get(AuthService);
const router = injector.get(Router);
if(authService.isLoggedIn()) {
return true;
} else {
router.navigate(["/Login", {next: nextInstr.urlPath}]);
return false;
}
}
Этот подход не работает, потому что urlPath
свойство nextInstr
не показывает «полный» URL (в нем отсутствует параметры запроса, например).
Есть ли способ построить полный URL-адрес от экземпляра ComponentInstruction
, например nextInstr
?
Вы видели дискуссию в https://github.com/angular/angular/issues/4112 Я думаю, что это очень похоже на то, что вы пытаетесь выполнить. Существует также ссылка на Plunker (не было более пристального взгляда). –
@ GünterZöchbauer спасибо за ссылку, но я уже решил проблему, как получить инжектор внутри декоративной функции 'isUserAuthenticated'. Моя проблема заключается в том, как создать URL-адрес для перенаправления пользователя после входа в систему. –
Я не читал все детали, но у меня создалось впечатление, что они обсуждали параметры запроса. Извините за шум. –