#spartacus-storefront
#spartacus-витрина магазина
Вопрос:
На домашней странице я проверяю статус входа в систему, и в зависимости от этого статуса я показываю / скрываю некоторые компоненты. В первый раз все работает нормально.
Если пользователь не вошел в систему, он показывает «компонент входа» вместо слота «SiteLogin». Но после процесса входа в систему другой компонент не отображается, пока я не выполню перезагрузку вручную (после перезагрузки отображается правильный компонент).
Опять же, если я выполняю выход, вместо отображения моего пользовательского компонента отображается ссылка для входа / входа по умолчанию (после перезагрузки страницы также отображается правильный компонент).
Есть ли какой-либо способ исправить это (или) любой альтернативный способ достижения той же функциональности?
app.component.html
<cx-storefront></cx-storefront>
<ng-container *ngIf="user$ | async as user; else login">
<cx-page-slot position="HeaderLinks"></cx-page-slot>
</ng-container>
<ng-template #login>
<ng-template cxOutletRef="SiteLogin">
<app-signin-menu></app-signin-menu>
</ng-template>
</ng-template>
app.component.ts
export class AppComponent implements OnInit{
user$: Observable<User>;
constructor(
private auth: AuthService, private userService: UserService
) {}
ngOnInit(){
this.user$ = this.auth.isUserLoggedIn().pipe(
switchMap((isUserLoggedIn) => {
if (isUserLoggedIn) {
return this.userService.get();
} else {
return of(undefined);
}
})
);
}
}
Комментарии:
1. Независимо от того, почему это не работает (еще не проверял), рассматривали ли вы возможность использования ограничений cms в серверной части? Вы можете ограничить доступ компонентов cms только для зарегистрированных пользователей.
2. ДА. Я получаю компоненты CMS только тогда, когда пользователь вошел в систему. Но в моем случае мне нужно показать ссылку для регистрации / входа в оверлей вместо прямого отображения в заголовке. Вот что я делаю.
3. Случайно, у вас не было времени изучить эту проблему?
4. Не могли бы вы предоставить провод (или два), чтобы проиллюстрировать, чего вы хотите достичь? Возможно, вы добавите это в описание этого вопроса?