我有一个angular.js单页面应用程序,可以针对RESTful API(Servicestack)进行身份验证。一切正常。当返回来自认证api的响应时,用户名存储在Angular服务上,isAuthenticated标志设置为true。
针对[Authenticate]归因Web服务的任何请求都会返回数据。
我的问题是,当我刷新浏览器时,我的javascript角度对象被刷新,用户身份验证的事实被遗忘了。然而,当我调用[Authenticate]归因服务时,他们正常工作,因为会话仍然有效......
为相当noob问题道歉但是当javascript对象被销毁并重新创建时,浏览器如何将会话传递给Web服务?如何在刷新时抓取相同的会话并使用用户名等设置我的Angular服务。
答案 0 :(得分:3)
默认情况下,ServiceStack身份验证使用cookie来存储会话令牌。这意味着您的Angular应用程序将在您首次登录时收到cookie。它将为后续请求传递此cookie,并且当会话在服务器上仍然有效时它们将成功。
问题是,当您刷新页面时,Angular将丢失对象状态,即告诉您有活动会话。所以你必须将这些知识恢复到Angular。有两种方法可以解决这个问题:
在应用程序启动时检查ss-id
cookie,假设您有一个有效的会话。换句话说,恢复到已登录状态,直到从服务器收到401错误。这是最快的方法,如果有人刷新页面,则不需要额外的开销来检查会话。
检查ss-id
cookie并进行测试验证请求以检查会话是否仍然有效。
如果您需要恢复其他信息,例如当前登录用户的名称等,那么您需要将其存储在cookie /本地存储中以在刷新时恢复它,或者使用方法2,并从服务器。
您可以使用$cookies
provider来管理会话Cookie。