Распознаватель с защитой в angular4 с помощью ASP.NET Web Api 2
Я работаю над Angular 4 Project с Asp.NET Web API 2. Я хочу проверить, авторизован ли пользователь, прежде чем он войдет в раздел администратора. Я попытался установить резольвер в маршрутизации angular, вот так:
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
return this.profile.getProfile()
.map(result => { setAuthorized(); return result;})
.catch(res => { return Observable.of(new Profile()); });
}
Функция setAuthorized() установит авторизацию в глобальной переменной, чтобы ее можно было проверить с помощью функции isAuthorized() и защиты авторизации:
if (this.route.firstChild != null) {
return this.route.firstChild.data.map( res => {
if (isAuthorized()) {
return true;
}
});
} else {
return Observable.of(false);
}
маршрутизация:
const routes: Routes =
[
{path: ':lang', component: LanguageComponent,
children: [
{ path: 'dashboard', component: DashboardComponent, resolve: { authority: AuthorityResolverService} },
{ path: 'admin', component: AdminComponent, canActivate: [AuthorizedGuard], resolve: { authority: AuthorityResolverService}},
]}
];
Кажется, все работает правильно. Но проблема в том, что когда я нажимаю F5 или когда я копирую URL и открываю его в новом окне, я всегда буду перенаправлен на страницу ошибки. когда я отслеживаю рабочий процесс, он показывает, что он не вызывал распознаватель, когда я пытаюсь получить прямой доступ к URL:
локальный / администратор
Я не получаю никакой ошибки, но меня перенаправляют всегда. Есть идеи?
1 ответ
Это ожидаемое поведение. Когда вы попадете на маршрут, охранник будет запущен первым, и если canActivate
возвращает true, тогда будет разрешен распознаватель. Так как ваш guard
вернет false, ваш распознаватель не будет вызван (и не должен).
Это означает, что вы, возможно, захотите немного переработать свою логику таким образом, чтобы поместить контроль / авторизацию в охрану, потому что это именно то, что на самом деле охранник: он должен проверить какое-то условие и решить на его основе. Ваше условие состоит в том, что пользователь аутентифицирован, так что принадлежит охраннику.
Цель резольверов - получить данные, необходимые для компонента, как только пользователь сможет активировать компонент.