Я использую AngularFire2 для защиты моих маршрутов с пользовательскими утверждениями, как описано в этой ссылке .
. Это работает, как ожидается, чтобы разрешить / заблокировать пользователей с моими пользовательскими утверждениями.Но я заметил, что есть проблема, когда пользователь без претензий пытается войти в систему, и после этого в том же окне пользователь с претензиями пытается войти.Происходит следующее:
- Пользователь пытается войти с "фиктивным" пользователем, у которого нет претензий.
- Пользователь аутентифицирован, но он перенаправляется для входа в систему, поскольку онпретензии не принимаются
- Пользователь пытается войти в систему с помощью пользователя IHaveClaims, он аутентифицирован, но не перенаправлен на следующую страницу.
Мой код:
const isAccess = () =>
pipe(
customClaims,
map(claims => {
return claims.access === true ? claims.access : ['/auth'];
})
);
const routes: Routes = [
/** this is the login page */
{
path: 'auth',
loadChildren: () =>
import('@project/section/auth').then(module => module.SectionAuthModule)
},
{
path: 'home',
loadChildren: () =>
import('@project/section/home').then(module => module.SectionHomeModule),
canActivate: [AngularFireAuthGuard],
data: { authGuardPipe: isAccess }
},
Я заметил, что после успешного входа в систему с моим фиктивным пользователем моя функция isAccess больше не вызывается, пока я не обновлю страницу (F5).Если я попытаюсь перейти к защищенному после входа в систему с моим пользователем IHaveClaims, охранник теперь будет распознавать пользователя как претензии и будет загружать ресурс, как и ожидалось, но это будет работать, только если я наберу маршрут в браузере (добавьте/ home после localhost).
Здесь я ищу следующее:
- Пользователь пытается войти с "фиктивным" пользователем, у которого нет претензий
- Пользователь остается на странице входа в систему (я добавлю обработку претензий позже)
- Пользователь пытается войти в систему с пользователем 'IHaveClaim', у которого есть претензии
- Пользователь перенаправлен на главную страницу
Кто-нибудь знает, что мне не хватает в моем коде?