0

我了解如何设置 Google 策略并使用会话 cookie 正常完成,但我的问题围绕着保持登录状态客户端。

如何使用会话 cookie 在客户端显示用户已登录/注销?我是否应该isLoggedIn根据每个请求的结果设置一个变量?我应该简单地检查 cookie 是否存在并设置变量,还是应该有一个 API 告诉我是否req.user不为空?

4

1 回答 1

0

页面初始化时我做的第一件事是通过 API 请求请求当前登录的用户。此请求可能包含也可能不包含有效的会话令牌,我可以使用它在后端找到当前登录的用户。根据您的后端实现,这可以像检查请求中是否存在 req.user 一样简单。在我的应用程序中,无论如何我都需要用户信息,因此当且仅当请求是由有效会话发出时,它们也会在此请求中传输。

这样,我目前只使用一个请求来检查用户是否已登录。此状态可以保存在应用程序范围的服务中,以便您可以在需要时使用此信息。仅检查前端的 cookie 可能是不够的。即使您在浏览器中设置了会话 cookie,也并不意味着它对后端请求仍然有效。此信息只能由后端验证,因此您应该始终通过某种请求来检查它。

检查用户的角度初始化

我在角度应用程序初始化时初始化用户的方法是使用 APP_INITIALIZER 作为依赖项。它在初始化过程中触发给定服务的特定功能。这样,当应用程序完成加载时,有关登录状态的信息就已经存在。

export function startupServiceFactory(startupService: UserService): Function {
    return () => startupService.initUser();
}
@NgModule({
    imports: [...],
    providers: [..., { provide: APP_INITIALIZER, useFactory: startupServiceFactory, deps: [UserService], multi: true }, ...],
    declarations: [...],
    bootstrap: [AppComponent]
})
于 2017-12-02T13:44:02.680 回答