javascript - 浏览器刷新 - 丢失服务堆栈身份验证 session 数据

标签 javascript angularjs session authentication servicestack

我有一个 angular.js 单页应用程序,它根据 RESTful API (Servicestack) 进行身份验证。这一切都很好。当返回身份验证 api 的响应时,用户名存储在 Angular 服务中,并且 isAuthenticated 标志设置为 true。

任何针对 [Authenticate] 属性网络服务的请求都会返回数据。

我的问题是,当我刷新浏览器时,我的 javascript angular 对象被刷新,并且忘记了用户身份验证的事实。然而,当我调用 [Authenticate] 属性服务时,它们可以正常工作,因为 session 仍然存在......

对于相当菜鸟的问题表示歉意,但是当 javascript 对象被销毁并重新创建时,浏览器如何将 session 传递给 Web 服务?如何在刷新时获取相同的 session 并使用用户名等设置我的 Angular 服务?

最佳答案

ServiceStack Authentication 默认使用 cookie 来存储 session token 。这意味着您的 Angular 应用程序将在您首次登录时收到 cookie。它将为后续请求传递此 cookie,并且当 session 在服务器上仍然有效时它们将成功。

问题是 Angular 会丢失对象状态,当您刷新页面时,这会告诉它您有一个事件 session 。所以你必须把这些知识还原到 Angular 中。有两种方法可以解决这个问题:

  1. 在您的应用程序启动时检查 ss-id cookie,并假设您有一个有效的 session 。换句话说,恢复到登录状态,直到您从服务器收到 401 错误。这是最快的方法,如果有人刷新页面,不需要额外的开销来检查 session 。

  2. 检查 ss-id cookie 并发出测试验证请求以检查 session 是否仍然有效。

如果您需要恢复其他信息,例如当前登录的用户名等,那么您需要将其存储在 cookie/本地存储中以在刷新时恢复它,或者使用方法 2,并从服务器。

您可以使用 $cookies provider管理 session cookie。

关于javascript - 浏览器刷新 - 丢失服务堆栈身份验证 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21975722/

相关文章:

multithreading - 线程中的 hibernate session

jsf - 在 session 超时时删除 JSF 托管 bean

javascript - 悬停时暂时偏离 CSS 动画,然后恢复

javascript - 占位符评估后的 AngularJS 事件

javascript - 内存泄漏 : Remaining elements in cache and data_user in AngularJs

angularjs - 如何在angularJS中检测上传的文件类型

javascript - Emberjs 学习资源

javascript - child 继承 parent 的 z-index

javascript - RequestAnimationFrame 不适用于简单 Canvas

java - 使用 php 和 Java session