我正在使用angular.js构建一个单页应用程序,我正面临这个问题,我无法找到正确的答案。
当我们在角度应用程序中进行整页刷新时,我们应该如何检查用户是否仍然有一个有效的会话?状态提供者或UI路由器仅将URL路由到所请求的页面,但是如果用户的会话已过期该怎么办?
我想到的一件事是使用服务并在用户登录后存储布尔值,并在每次页面刷新或状态更改时,我们检查此布尔值并将用户重定向到登录页面,如果此值是假的。但是,如果我们进行刷新,则会重置此布尔值。
考虑将此键值存储在cookie或html本地存储中,但这些值在这里存储的安全性如何。有些人可以重置此布尔值以获得对页面的访问权限。
请告诉我。
答案 0 :(得分:1)
要使客户端应用程序安全,您需要涉及某种类型的服务器。在cookie或本地存储中存储值不会有任何好处,因为这些可以被用户操纵(就像浏览器上的其他所有内容一样)。
不确定您可以使用哪些选项,但我建议您查看Nodejs / Expressjs / Passportjs - 这是一个非常棒的组合,非常好的支持在这里。
一旦你在这个领域取得进步,你就可以提出一个更有针对性的问题。
答案 1 :(得分:1)
我认为你在这里混淆了一些概念。
一个 - 是对服务器的用户身份验证。它必须是服务器,否则仅客户端应用程序中的用户会话的概念是无用的。这通常由认证cookie促进。 cookie是给用户的安全令牌,并由服务器上的秘密签名。 Cookie包含登录名和过期等内容。在浏览器发出的每个请求中,cookie都由服务器验证。
两个 - 是客户端应用中维护的良好用户体验。我的意思是,如果你没有检查cookie是否已经过期,你对服务器的ajax调用将(并且应该)失败,并且HTTP 401 - 未经授权。您可能希望阻止这种情况,并让您的应用程序抢先重定向到登录页面,或者如果适用,请求刷新安全令牌。
那么所有这些意味着什么?
resolve
参数让loginInfo可供控制器使用。这是my answer关于您可能会觉得有用的问题。