我是AngularJS的新手,现在我试图用身份验证构建我的第一个系统。一切正常,只是,当用户刷新页面,所有的用户信息都不见了......AngularJs在认证后将用户数据保存到会话中
我跟着这个教程:
http://www.sitepoint.com/implementing-authentication-angular-applications/
现在,这是我倾向于确保用户数据保留在它应该是的位置:
当用户登录时,我的API以JSON的形式返回他/她的详细信息,然后将其分别放入$rootScope
变量以用于站点以及会话中。旁边的是,我在签署时返回true rootscope一个变量,而假的时候没有,像这样:
$rootScope.loggedin = true;
$rootScope.user = data;
$window.sessionStorage["info"] = data;
// console.log($window.sessionStorage["info"]);
这一切都发生在认证的工厂。
然后,当用户刷新,而同一工厂再次跑了,下面的函数将开始工作:
function init() {
if ($window.sessionStorage["info"]) {
$rootScope.loggedin = true;
$rootScope.user = $window.sessionStorage["info"];
info = $window.sessionStorage["info"];
}
}
init();
(我认为这会工作,因为文章和其他各种来源的网页上这么说)
然后在我的HTML,我用的loggedIn变量来确定用户是否登录:
<div ng-show="!loggedin">
<a href="/login" class="btn btn-default btn-flat sidebar-toggle" style="position:relative;top:-3px; right: 5px;">Log in </a>
<a class="btn btn-default btn-raised" style="background: #03A9F4; color:#fff; position:relative;top:-3px; right: 5px;">Registreer</a>
</div>
<div ng-show="loggedin">
<ul class="nav navbar-nav">
<li class="drop">
<a href="bootstrap-elements.html" data-target="#" class="dropdown-toggle" data-toggle="dropdown">{{user.username}} <b class="caret"></b></a>
<ul class="" style="z-index:99999999999;">
<li><a href="javascript:void(0)">Some log-in only stuff</a></li>
</ul>
</li>
</ul>
</div>
现在,所有这一切都工作得很好,当我是劳但是当我刷新页面时,它会检测到我已登录,但我的名字只是保持空白,因为我猜未定义。
这是为什么,我该如何解决?
谢谢。
网络存储只存储字符串和字符串。 'user'绝对不是一个字符串。你不应该猜测'user'的值,而是检查它。 – zeroflagL