Вы можете использовать auth guard или resolver , что-то вроде этого:
Этот сторож предотвратит загрузку маршрута, если пользователь не аутентифицирован.
export class AdminAuthGuard implements CanActivate {
constructor(private auth: AngularFireAuth) {}
canActivate(): Observable<boolean> | Promise<boolean> | boolean {
return this.auth.authState.pipe(map((auth) => {
if (!auth) {
// Do stuff if user is not logged in
return false;
}
return true;
}),
take(1));
}
}
Используйте его в вашем модуле маршрутизации:
{
path: 'yourPath',
component: YourComponent,
canActivate: [AdminAuthGuard],
}
или этот преобразователь будет устанавливать текущий идентификатор пользователя до загрузки маршрута:
export class UserIdResolver implements Resolve<boolean> {
constructor(
private auth: AngularFireAuth,
private authService: AuthService,
) {}
resolve(): Observable<boolean> {
return this.auth.user.pipe(map((user) => {
if (user) {
this.authService.setCurrentUser(user.uid); // set the current user
return true;
}
this.authService.setCurrentUser(null);
return false;
}), take(1));
}
}
Используйте его в вашем модуле маршрутизации:
{
path: 'yourPath',
component: YourComponent,
resolve: [UserIdResolver],
runGuardsAndResolvers: 'always',
}