如何在AngularJS应用程序中保存会话数据?

时间:2013-09-12 09:36:34

标签: session angularjs cookies

我有一个用AngularJs编写的Web应用程序,它使用cookie来验证REST API中的请求。

用户登录后,会收到cookie并将其保存在浏览器中,所有后续请求都会将cookie发送到服务器。有一个'User'服务/对象可以保存isLoggedIn和用户名值(用于UI显示/流程)。现在,如果我刷新“索引”页面,应用程序将重新启动。这意味着我的“用户”对象将被清除。我可以检查cookie的存在,如果存在,我可以将User.isLoggeIn重新设置为true并从那里开始,但我仍然需要获取用户名,id等。所以,我的问题是:应该我在API中创建了某种“ping”端点来验证cookie是否有效?如果是这样,API将向我发回用户ID和用户名...或者我应该将用户数据保存在LocalStorage(或某些类似的跨浏览器的东西)中,并假设如果cookie存在则记录用户?将自动验证对需要身份验证的页面的任何其他后续请求。所以,这个问题实际上只适用于用户刷新索引页面的场景 - 因此,重新启动Web应用程序。我想知道用户数据,因为我想显示“用户主页”而不是“公共主页”。

您怎么看?

1 个答案:

答案 0 :(得分:10)

你应该依赖服务器。在服务器上创建类似GetCurrentUser方法的内容。如果用户已登录,则返回用户的所有属性。

在身份验证完成后,您甚至应该使用此服务器api来获取用户数据。因此,身份验证成为首先对用户进行身份验证的两步流程,成功后,将再次调用服务器以获取当前用户的详细信息。

使用客户端本地存储器并不理想,因为在注销或会话过期时清理登录用户需要进行大量的簿记。

来自服务器的cookie也会有到期时间,并且只根据本地存储上存在的cookie做出决定可能不是最佳方法。