浏览器刷新 - 丢失的servicestack身份验证会话数据

时间:2014-02-23 22:47:34

标签: javascript angularjs session authentication servicestack

我有一个angular.js单页面应用程序,可以针对RESTful API(Servicestack)进行身份验证。一切正常。当返回来自认证api的响应时,用户名存储在Angular服务上,isAuthenticated标志设置为true。

针对[Authenticate]归因Web服务的任何请求都会返回数据。

我的问题是,当我刷新浏览器时,我的javascript角度对象被刷新,用户身份验证的事实被遗忘了。然而,当我调用[Authenticate]归因服务时,他们正常工作,因为会话仍然有效......

为相当noob问题道歉但是当javascript对象被销毁并重新创建时,浏览器如何将会话传递给Web服务?如何在刷新时抓取相同的会话并使用用户名等设置我的Angular服务。

1 个答案:

答案 0 :(得分:3)

默认情况下,ServiceStack身份验证使用cookie来存储会话令牌。这意味着您的Angular应用程序将在您首次登录时收到cookie。它将为后续请求传递此cookie,并且当会话在服务器上仍然有效时它们将成功。

问题是,当您刷新页面时,Angular将丢失对象状态,即告诉您有活动会话。所以你必须将这些知识恢复到Angular。有两种方法可以解决这个问题:

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

  2. 检查ss-id cookie并进行测试验证请求以检查会话是否仍然有效。

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

    您可以使用$cookies provider来管理会话Cookie。