在angular.js应用程序中维护页面刷新时的客户端页面状态

时间:2014-10-15 19:53:12

标签: javascript jquery angularjs single-page-application

我正在使用angular.js构建一个单页应用程序,我正面临这个问题,我无法找到正确的答案。

当我们在角度应用程序中进行整页刷新时,我们应该如何检查用户是否仍然有一个有效的会话?状态提供者或UI路由器仅将URL路由到所请求的页面,但是如果用户的会话已过期该怎么办?

我想到的一件事是使用服务并在用户登录后存储布尔值,并在每次页面刷新或状态更改时,我们检查此布尔值并将用户重定向到登录页面,如果此值是假的。但是,如果我们进行刷新,则会重置此布尔值。

考虑将此键值存储在cookie或html本地存储中,但这些值在这里存储的安全性如何。有些人可以重置此布尔值以获得对页面的访问权限。

请告诉我。

2 个答案:

答案 0 :(得分:1)

要使客户端应用程序安全,您需要涉及某种类型的服务器。在cookie或本地存储中存储值不会有任何好处,因为这些可以被用户操纵(就像浏览器上的其他所有内容一样)。

不确定您可以使用哪些选项,但我建议您查看Nodejs / Expressjs / Passportjs - 这是一个非常棒的组合,非常好的支持在这里。

一旦你在这个领域取得进步,你就可以提出一个更有针对性的问题。

答案 1 :(得分:1)

我认为你在这里混淆了一些概念。

一个 - 是对服务器的用户身份验证。它必须是服务器,否则仅客户端应用程序中的用户会话的概念是无用的。这通常由认证cookie促进。 cookie是给用户的安全令牌,并由服务器上的秘密签名。 Cookie包含登录名和过期等内容。在浏览器发出的每个请求中,cookie都由服务器验证。

两个 - 是客户端应用中维护的良好用户体验。我的意思是,如果你没有检查cookie是否已经过期,你对服务器的ajax调用将(并且应该)失败,并且HTTP 401 - 未经授权。您可能希望阻止这种情况,并让您的应用程序抢先重定向到登录页面,或者如果适用,请求刷新安全令牌。

那么所有这些意味着什么?

  1. 在服务器上强制执行身份验证
  2. 创建一个loginService,用于检查Cookie中的会话到期时间,或者您用户身份验证时使用的其他内容。
  3. 使用$routeProvider$stateProviderresolve参数让loginInfo可供控制器使用。这是my answer关于您可能会觉得有用的问题。