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.

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...