javascript - Angular JS + 用户认证 + 页面刷新

标签 javascript ajax angularjs authentication

所以这是我的问题。

我可以使用我创建的与我的 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/

相关文章:

php使用ajax后无法连接数据库

javascript - 使用类似于 sql 的正则表达式进行搜索过滤器,如 'a%'

javascript - 在不同对象上使用相同事件的最短方法

javascript - 如何暂时禁用 Ajax 调用中的按钮?

如果 Div 不可见,用于更新数据库的 PHP/JQuery/AJAX

javascript - 页面不会重定向到无效网址上的指定页面

angularjs - 父 div 中的 ui-sref 覆盖所有嵌套链接

javascript - AngularJS 递归 ng-repeat 变量与 ng-include 绑定(bind)

javascript - “符号”在 IE 11 中未定义

javascript - 在本地网络上测试时使用 geolocation.getCurrentPosition