所以这是我的问题.
我可以使用我所做的与我的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.