所以这是我的问题。
我可以使用我创建的与我的 pp rest API 通信的 auth 工厂从我的 angularJS 应用程序成功登录。 假设 Auth.login(user) -> (POST) myapi.com/user/login: 响应是 Auth 在本地保存的用户对象。因此 Auth.getCurrentUser() 返回本地用户对象。
我的其余 API,我还有一个 myapi.com/user/get_loggedin_user,它返回当前登录的用户(使用 php session )。因此,如果 Auth.getCurrentUser 实际上应该检查本地用户是否存在,如果不存在,则对 myapi.com/user/get_loggedin_user 执行 ajax 并检查是否在响应 null 之前登录。这里的一个问题是,ajax 很烦人,然后您需要放入一个成功回调函数并让所有代码在成功回调中执行。
现在让我在 Angular App(网站)mydomain.com/user/dashboard(已登录)上说我,然后我刷新浏览器。现在,当页面重新加载时,angular 不知道我当前的用户,所以在将我重定向到 mydomain/login 之前,我希望它检查用户是否已登录。我显然可以在 Controller 中进行 1 次调用,但是有没有更简单的方法我可以在具有一些访问限制的 Controller 中注册(例如:logged_in == true),当您访问任何具有登录要求的页面时,它会检查本地用户(如果不存在则获取用户) , 如果为空则跳转到登录页面,还是在符合要求时显示该页面?
不同的常见页面需求:null, logged_in, admin, function: haveAccess(user, object).
注意:我正在使用 stateProvider
最佳答案
如果我没有正确理解您的问题,您是在询问如何在调用 Controller 之前检查用户是否登录,并避免在每个 Controller 中检查登录状态需要它。
如果是这样,您应该查看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
}
}
});
然后在 Controller 中,loggedInUser
将被注入(inject)。
这是一个 site有更多的例子。
关于javascript - Angular JS + 用户认证 + 页面刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25984837/