微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – Angular JS用户身份验证页面刷新

所以这是我的问题.

我可以使用我所做的与我的pp rest API通信的auth工厂从我的angularJS应用程序成功登录.
让我们说Auth.login(用户) – > (POST)myapi.com/user/login:响应是Auth在本地保存的用户对象.因此,Auth.getCurrentUser()返回本地用户对象.

我的其余API,我还有一个myapi.com/user/get_loggedin_user,它返回当前登录用户(使用PHP会话).因此,如果Auth.getCurrentUser应该实际检查是否存在本地用户,如果没有对myapi.com/user/get_loggedin_user执行ajax并检查是否在响应null之前已登录.这里的一个问题是,ajax像这样烦人,你需要放入一个成功的回调函数,让所有代码在成功回调中执行.

现在让我说在角色应用程序(网站),mydomain.com/user/dashboard(已经登录),然后我刷新我的浏览器.现在,当页面重新加载时,angular不知道我当前的用户,所以在将它重定向到mydomain / login之前,我希望它检查用户是否已登录.我显然可以在控制器内进行一次调用,但是是否有一种更简单的方法,我可以在控制器中注册一些访问限制(例如:logged_in == true),当您访问任何具有登录要求的页面时,它会检查本地用户(如果不存在则获取用户) ,如果为null,则重定向登录页面,或者一旦符合要求就显示页面

不同的常见页面要求:null,logged_in,admin,function:haveAccess(user,object).

注意:即时通讯使用stateProvider

解决方法:

如果我正确理解了您的问题,那么您将询问如何在调用控制器之前检查用户是否已登录,并避免在需要它的每个控制器中检查登录状态.

如果是这样,您应该查看resolve参数 – 这在$routerProvider$stateProvide中都存在.

基本上你可以“解决”你的loggedInUser变量(通过MyAuth服务做你需要做的任何事情.

这是我对$routeProvider的一个例子:

$routeProvider
   .when("/someSecuredContent", {
     templateUrl: 'someSecuredContent.html',
     controller: 'SecuredController',
     resolve: {
        loggedInUser: function(MyAuth){
           return MyAuth.loggedIn(); // MyAuth.loggedIn() should return a $q promise
        }
     }
});

然后在控制器中,将注入loggedInUser.

这是一个有更多例子的site.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐