我目前有一个基于 meanjs 堆栈样板的设置,当我浏览网站的 URL 时,我可以让用户以这种“登录”状态登录。这是由于将用户对象保存在全局可用的服务中。
但是,这仅在我从基本根目录(即从“/”)导航并且仅在我的应用程序中导航时才有效。
如果我手动输入诸如“/page1”之类的 URL,它将丢失全局用户对象,但是如果我转到我的根主页并通过该站点导航到“/page1”。然后就好了,它在Service对象中看到了全局用户对象。
所以我猜这是因为整页刷新丢失了通过网站导航的全局值,所以你保留了所有变量。
需要注意的一些事项:
- 我启用了 HTML5Mode,使用前缀“!”。
- 我使用 UI 路由器
- 我使用带有'/'的标签
- 我在 express 上有一个重写规则,在加载我的所有路由后,我有最后一个路由将所有 '/*' 带到并发送回根 index.html 文件,因为那是 angularjs 的东西所在的位置。
我只是想知道人们通常在这里做什么?他们会恢复标准 cookie 和本地存储解决方案吗?我对 Angular 还很陌生,所以我猜那里有图书馆可以解决这个问题。
我只是想知道处理此问题的推荐方法或大多数人会做什么,这样我才能以正确的方式和我想的角度方式对齐。
更新:
如果我通过地址栏手动导航到我网站上的另一个 URL,我会丢失我的用户状态,但是如果我通过地址栏手动返回我的根目录,我的用户状态会再次出现,所以这不仅仅是失去状态在窗口刷新。所以它似乎与在根 URL 上运行的代码有关。
我有一个快速重写,手动输入的 URL(由于 HTML5 位置模式)应该首先返回 index.html,因为它包含 AngularJs 文件,然后 UI-Route 接管并正确路由它。
所以我本来预计根目录上的任何代码都会执行,所以它应该类似于通过站点导航或在地址栏中输入。我一定错过了一些关于 Angular 的东西。
更新 2
是的,所以更多的调查使我想到了这一点:
<script type="text/javascript">
var user = {{ user | json | safe }};
</script>
这是 index.html 的服务器端代码,我猜这在通过手动 URL 将页面刷新到新页面时不会运行。
使用 hash bang 模式,它可以工作,这是因为在 hash bang 模式下,即使我在浏览器中输入一个 URL,它也不会导致刷新,而使用 HTML5 模式,它会刷新。所以现在我能想到的解决方案是使用 sessionStorage。
除非有更好的选择?
更新 3:
使用 HTML5Mode 时处理此问题的最佳方法似乎是您只需要在快速服务器上重新编写以及其他一些事情。