在提供模板之前,Angular会检查用户的身份验证
Angular check authenticate user, before the template is served
当路由改变时,我尝试访问/settings
.when('/settings', {
templateUrl: 'partials/settings',
controller: 'SettingsCtrl',
authenticate: true
})
.run(function ($rootScope, $location, Auth) {
$rootScope.$on('$routeChangeStart', function (event, next) {
Auth.checkUser();
if (next.authenticate && !Auth.isLoggedIn()) {
$location.path('/login');
}
});
代码调用Auth.checkUser() (Asynch),然后调用Auth.isLoggedIn()。问题是,我需要等待Auth.checkUser(),它为我提供了正确的用户状态,或者在提供模板之前找到一种检查响应的方法。
checkUser: function(user, callback) {
var cb = callback || angular.noop;
return User.check(user,
function(user) {
$rootScope.currentUser = user.id;
return cb(user);
},
function(err) {
return cb(err);
}).$promise;
},
isLoggedIn: function() {
var user = $rootScope.currentUser;
return !!user;
}
你应该使用angularjs控制器的resolve
机制。这样,你就可以在渲染控制器之前定义它的任何先决条件(服务注入、等待承诺等)。
- 参见angular doc: https://docs.angularjs.org/api/ngRoute/provider/$routeProvider
- 查看angular-app项目中的工作示例:https://github.com/angular-app/angular-app/tree/master/client/src/common/security
的例子:
.when('/settings', {
templateUrl: 'partials/settings',
controller: 'SettingsCtrl',
authenticate: true,
resolve: {
isUserLogged: ['yourservice' , function(yourservice) {
return yourservice.isUserLoggedPromise();
}]
}
})
你的屏幕只会在(如果)isUserLoggedPromise
被解析
相关文章:
- Angular+bootstrap ui,检查当前选项卡是否已处于活动状态
- Angular UI路由器-检查父状态
- 授权Angular中的检查访问
- Angular JS授权-在加载页面之前检查用户角色
- 在Angular.js中通过检查作用域变量进行过滤
- Angular 2-检查图像url是否有效或已损坏
- 使用AngularJS和Angular Translate如何检查字符串是否已被翻译
- 如何检查angular是否已经有模块
- 如何使用angular检查所有复选框
- angular未能加载检查器中的资源错误
- 如何检查“http://”是否包含在 Angular .js 应用程序的 url 输入中
- Angular & HTML / 检查元素是否脏
- 检查会话存储并将变量传递给 Angular 中的$scope的正确方法
- Angular js,如何在调用url之前检查用户是否有互联网连接
- Angular 应用程序在异步调用 Firebase 后未更新(脏检查)
- angular的api代码中的函数如何检查匿名函数签名获得多个匹配项
- 如何在没有表单的情况下在 Angular JS 中应用验证并检查所有文件是否应该填写
- 使用angular检查出生日期
- Angular——检查新数据并应用自定义类或函数
- 使用Angular检查表单中哪个字段无效