登录坚持 MEAN 堆栈和护照 google 策略

Login persist MEAN stack and passport google strategy

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

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

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

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

在 angular 初始化时检查用户

我在 angular 应用程序初始化时初始化用户所做的是使用 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]
})