【发布时间】:2020-07-18 16:34:30
【问题描述】:
我刚刚开始在现有的应用程序中集成 Angular Universal,我注意到页面呈现错误的布局并且当页面完全加载时一切看起来都很好。
这是一个例子:
我在页面加载时得到这样的登录状态:
this.authService.isLoggedIn.subscribe(res => {
this.isLoggedIn = res;
});
并根据结果为真或假设置不同的布局:
<div *ngIf="isLoggedIn" class="user-logged">
// user logged in
</div>
<div *ngIf="!isLoggedIn" class="user-logged">
// user not logged in
</div>
但是当服务返回 true(这意味着用户已登录)时,我可以看到未登录状态,然后页面加载,一切看起来都很好。 所有 BreakpointObserver 检查也会发生这种情况。
更新 1: 这是我尝试过的: 我创建了一个 AppConfigService:
@Injectable()
export class AppConfigService {
private isLoggedStatus: boolean;
constructor(private authService: AuthService) { }
public isLoggedIn(): boolean {
return this.isLoggedStatus;
}
load() {
return new Promise((resolve, reject) => {
this.authService.isLoggedIn.subscribe(loggedInStatus => {
this.isLoggedStatus = loggedInStatus;
resolve(true);
});
});
}
}
在我的 AuthService 中:
private isLoginSubject = new BehaviorSubject<boolean>(this.isAuthenticated);
get isLoggedIn(): Observable<boolean> {
return this.isLoginSubject.asObservable();
}
get isAuthenticated(): boolean {
const token = this.getToken();
if (token) {
if (jwtHelper.isTokenExpired(token)) {
return false;
} else {
return true;
}
} else {
return false;
}
}
在我的 app.module.ts 中
export function appConfigFactory(provider: AppConfigService) {
return () => provider.load();
}
providers: [
AppConfigService,
{
provide: APP_INITIALIZER,
useFactory: appConfigFactory,
deps: [AppConfigService],
multi: true
}
]
我认为问题在于服务器端使用本地存储,但如果这是问题,我如何检查用户是否已登录?
【问题讨论】: