Я пытаюсь получить идентификатор пользователя от текущего пользователя, вошедшего в систему, чтобы настроить данные, загружаемые из моего DataService . Моя цель:
- AuthGuard следует вызывать до загрузки InboxComponent.
- Этот AuthGuard должен установить переменную user в AuthService
- После этого я смогу использовать authService.user в DataService.
Однако console.log(this.authService.user)
возвращает значение undefined, хотя console.log(authState)
в AuthGuard правильно регистрирует информацию о пользователе.
Есть какие-нибудь подсказки о том, что могло быть не так?
Служба аутентификации
export class AuthService {
public user: any;
constructor(private af: AngularFire, public auth$: FirebaseAuth) {
console.log("Auth service state:", this.authState);
}
< Сильный > AuthGuard
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) {}
canActivate(): Observable<boolean> {
return this.authService.auth$
.take(1)
.map(authState => {
console.log(authState)
this.authService.setUser(authState);
return !!authState })
.do(authenticated => {
if (!authenticated) {
this.router.navigate(['/error']);
}
});
}
}
Служба данных
export class DataService {
private userPath: string;
constructor(private af: AngularFire, private authService: AuthService) {
console.log(this.authService.user);
}
Маршрутизатор
const routes: Routes = [
{ path: 'inbox', component: InboxComponent, canActivate: [AuthGuard] }
Модуль приложения
@NgModule({
declarations: [
InboxComponent
],
imports: [
EmailsModule
],
providers: [
AuthService,
AuthGuard
],
bootstrap: [AppComponent]
})
export class AppModule { }
1 ответ
Я наконец решил это. У меня был вызов службы DataService в моем файле app.component.ts
, чтобы получить некоторые данные в моей навигации. Он загружается вне модуля-маршрутизатора и поэтому вызывается до вызова AuthService. Это, в свою очередь, вызвало DataService перед вызовом AuthGuard.
Похожие вопросы
Новые вопросы
authentication
Аутентификация - это процесс подтверждения личности или подтверждения личности.
AuthService
синглтон? Где вы его предоставляете ?this.authService.setUser(authState);
работает? Что произойдет, если вы замените эту строку наthis.authService.user = authState;
?get user() { return this.authService.user; }
. Он по-прежнему будет неопределенным в конструкторе, но везде внутри службы вы должны получить правильное значение ...