7

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

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

你怎么看?

4

1 回答 1

10

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

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

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

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

于 2013-09-12T09:52:24.220 回答