角检查验证用户,模板送达前 [英] Angular check authenticate user, before the template is served

查看:119
本文介绍了角检查验证用户,模板送达前的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当路由变化,我尝试访问/设置

 。当('/设置,{
    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-必要的(服务注入,等待承诺等)之前对其进行渲染。

例如:

 。当('/设置,{
    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.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆