Почему обновление на защищенной странице перенаправляет меня на root, а не на указанное мной перенаправление?

Я использую фреймворк Angular 2. Я настроил свой модуль маршрутизации приложений так, чтобы меня сразу же перенаправляли на страницу входа (с использованием pathmatch 'full' и redirectTo: 'signOn'. Все остальные маршруты в моем модуле маршрутизации приложений имеют canActivate: CanActivateViaAuthGuard. Это позволяет пользователю перейдите к другим ссылкам, если они вошли в систему. Это работает правильно, и после входа в систему все в порядке. Пользователь может даже выйти из системы и вернуться на домашнюю страницу.

Однако, если пользователь вошел в систему, а затем обновляет страницу, это технически устанавливает логическое значение (которое позволяет им перемещаться) обратно в значение false и пытается открыть корневую страницу localhost:4020, которая пуста. Мне нужно, чтобы он перенаправлялся на localhost:4020/signOn, как вначале, если пользователь обновляет страницу.

Любой совет?

Пример маршрутов в моей переменной paths:

{ path: '', redirectTo: 'dash', pathMatch: 'full' },
{ path: 'signOn', component: SignOnComponent},
{ path: 'dash', component: 'DashComponent', canActivate: [CanActivateViaAuthGuard]},
{ path: 'admin', component: 'AdminComponent', canActivate: [CanActivateViaAuthGuard]},

person skyleguy    schedule 29.01.2018    source источник


Ответы (1)


В соответствии с вашим описанием вы сказали this technically sets the boolean, который, очевидно, будет сброшен при обновлении пользователя. Рекомендуемый способ поддерживать состояние входа - использовать файлы cookie или хранилище сеансов. Например, после входа в систему вы можете добавить ключ в хранилище сеанса как

sessionStorage.setItem('isSignedIn', 1);

и получить его как

var state = sessionStorage.getItem('isSignedIn');
person Sumeet Kale    schedule 29.01.2018
comment
Раньше я никогда не использовал хранилище сессий. Что мне нужно импортировать / настроить, чтобы использовать? - person skyleguy; 30.01.2018
comment
ничего такого. Вам не нужно ничего импортировать или настраивать. Это глобальная переменная. PS. вы также можете использовать localStorage - person Sumeet Kale; 30.01.2018