Tworzę system uwierzytelniania w kanale2 z myślą, że jeśli użytkownik, który nie jest uwierzytelniony, spróbuje przejść do "chronionego" adresu URL, system przekieruje użytkownika do strony logowania wprowadzając url zapytanie o nazwę "next", które pomoże systemowi logowania przekierować użytkownika z powrotem tam, gdzie chciał być na pierwszym miejscu.Przekierowanie Angular2 po zalogowaniu
login?next=my-redirect-url
Aby chronić swoje komponenty, używam dekorator @CanActivate(isUserAuthenticated)
we wszystkich z nich. Funkcja isUserAuthenticated
jest czymś, co następuje:
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;
}
}
Takie podejście nie działa, ponieważ własność nextInstr
urlPath
nie pokazuje „pełną” url (brakuje params zapytań na przykład).
Czy istnieje sposób na zbudowanie pełnego adresu URL z instancji ComponentInstruction
, np. nextInstr
?
Czy widziałeś dyskusję na https://github.com/angular/angular/issues/4112 Myślę, że jest dość podobny do tego, co próbujesz osiągnąć. Jest też link do Plunkera (samemu się jeszcze nie przyjrzałem). –
@ GünterZöchbauer dziękuję za link, ale już rozwiązałem problem, jak uzyskać wtryskiwacz wewnątrz funkcji dekoracyjnej 'isUserAuthenticated'. Mój problem polega na tym, jak wygenerować adres URL, aby przekierować użytkownika z powrotem po zalogowaniu. –
Nie czytałem wszystkich szczegółów, ale miałem wrażenie, że omawiali także parametry zapytań. Przepraszamy za hałas. –