У меня есть СПА с AuthGuard. Если использование не регистрируется, страница ошибки перенаправления страницы, в противном случае перенаправляет определенные маршруты. Теперь.
- Пользователь не авторизован
- Вызов
/dashboard
иAuthgurad
перенаправляет/error?returnUrl=/dashboard
- Вызов пользователя
/login?key=112233
- На странице входа подпишитесь на
AuthService
, создайте токен пользователя и перенаправьте/dashboard
- перед рендерингом
/dashboard
срабатывает AuthGuard и AuthGurad позволяет им, потому что все в порядке /dashboard
отображается нормально- Пользователь хочет перейти
/claim/search page
- Маршрутизатор изменяет URL-адрес страницы, но
router-outlet
не отображает перенаправленный компонент - Если окно обновления пользователя Страница браузера работает нормально, в противном случае SPA не работает
Моя проблема на шаге 8,9
мой маршрут:
const routes: Routes = [
{
path: '',
redirectTo: 'dashboard',
pathMatch: 'full',
},
{
path: 'dashboard',
component: DashboardPageComponent,
canActivate: [AuthGuard]
},
{
path: 'claim',
canActivate: [AuthGuard],
children: [{
path: 'search',
component: ClaimSearchPageComponent,
},
{
path: 'detail/:id',
component: ClaimDetailPageComponent,
}]
},
{
path: 'login',
component: LoginPageComponent,
},
{
path: 'error',
component: ErrorPageComponent,
},
{
path: '**',
component: ErrorPageComponent,
}
];
страница авторизации :
ngOnInit() {
this._returnUrl = this._route.snapshot.queryParams['returnUrl'] || '/';
this._encryptedKey = this._route.snapshot.queryParams['key'];
this._authenticationService.login(this._encryptedKey)
.subscribe(
data => {
this._router.navigate([this._returnUrl]);
});
}
Служба аутентификации:
public get isLogged(): boolean {
return !!this.currentUserSubject.value;
}
public login(encryptedKey: string) {
return super.httpPostModel(User, environment.apiService.endPoints.user.login, { key: encryptedKey }).pipe(map(user => {
sessionStorage.setItem('currentUser', JSON.stringify(user));
this.currentUserSubject.next(user);
return user;
}));
}
охрана авторизации
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
if (this._authenticationService.isLogged) {
return true;
}
this._router.navigate(['/error'], { queryParams: { returnUrl: state.url } });
return false;
}