角检查验证用户,模板送达前 [英] Angular check authenticate user, before the template is served
问题描述
当路由变化,我尝试访问/设置
。当('/设置,{
templateUrl:'谐音/设置
控制器:'SettingsCtrl',
验证:真
}).RUN(函数($ rootScope,$位置,验证){
$ rootScope。在$('$ routeChangeStart',函数(事件,旁边){
Auth.checkUser();
如果(next.authenticate&放大器;&放大器;!Auth.isLoggedIn()){
$ location.path('/登录');
}
});
在code调用Auth.checkUser()(非同步),后来到!Auth.isLoggedIn()。问题是,我需要等待Auth.checkUser(),它给我的用户的权利状态,或者找到一个方法来检查服务模板之前的响应。
checkUser:功能(用户,回调){
变种CB = ||回调angular.noop;
返回USER.CHECK(用户,
功能(用户){
$ rootScope.currentUser = user.id;
返回CB(用户);
},
功能(错误){
返回CB(ERR);
})$的承诺;
}, isLoggedIn:功能(){
VAR用户= $ rootScope.currentUser;
返回!!用户;
}
您应该使用angularjs控制器的解析
机制。这样,您就可以定义控制器的任何pre-必要的(服务注入,等待承诺等)之前对其进行渲染。
- 见角DOC: https://docs.angularjs.org/api/ngRoute /供应商/ $ routeProvider
- 查看角应用项目的例子:的https://github.com/angular-app/angular-app/tree/master/client/src/common/security
例如:
。当('/设置,{
templateUrl:'谐音/设置
控制器:'SettingsCtrl',
验证:真实,
解析:{
isUserLogged:['yourservice',函数(yourservice){
返回yourservice.isUserLoggedPromise();
}]
}
})
您的屏幕只会之后(如果)被渲染 isUserLoggedPromise
解析
When the route change, I try to access to /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');
}
});
The code calls to Auth.checkUser() (Asynch) and later to !Auth.isLoggedIn(). The problem is that I need to wait for Auth.checkUser(), that gives me the right status of the user, or find a way to check the response before serving the template.
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;
}
You should use the resolve
mechanism of angularjs controllers. This way you can define any pre-requisite (service injection, waiting promises, etc) of your controller before render it.
- See angular doc : https://docs.angularjs.org/api/ngRoute/provider/$routeProvider
- See a working example on angular-app project : https://github.com/angular-app/angular-app/tree/master/client/src/common/security
Example :
.when('/settings', {
templateUrl: 'partials/settings',
controller: 'SettingsCtrl',
authenticate: true,
resolve: {
isUserLogged: ['yourservice' , function(yourservice) {
return yourservice.isUserLoggedPromise();
}]
}
})
Your screen will be rendered only after (and if) isUserLoggedPromise
is resolved
这篇关于角检查验证用户,模板送达前的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!