【问题标题】:How to persist session data in an AngularJS application?如何在 AngularJS 应用程序中持久化会话数据?
【发布时间】:2013-09-16 15:00:21
【问题描述】:

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

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

你怎么看?

【问题讨论】:

标签: session angularjs cookies


【解决方案1】:

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

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

为此使用客户端本地存储并不理想,因为您需要做大量的簿记工作,在注销或会话到期时清理登录用户。

此外,来自服务器的 cookie 也会有过期时间,仅根据本地存储中存在的 cookie 做出决定可能不是最佳方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2019-07-31
    • 1970-01-01
    • 2013-02-21
    相关资源
    最近更新 更多