2016-09-29 73 views
0

我們正在製作一個使用角度和UI路由器來控制狀態的流星應用程序。如果用戶無法訪問網站的主要部分,我們想要顯示促銷網站。在MongoDB的用戶集合中的用戶文檔上會有一個標誌,表明它們是否有權訪問。流星 - 使用UI路由器加載狀態之前的呼叫功能

如果他們沒有訪問權限,我們如何在加載狀態之前指向這個促銷狀態?基本流程將調用一個函數來檢查它們是否有權訪問,然後根據此狀態加載狀態。

回答

3

在爲受保護的頁面的路徑(或在我的情況下,一組保護的頁面的母公司),把這個:

.state('app', { 
     abstract: true, 
     template: '<mymenu></mymenu>', 
     controller: Menu, 
     resolve: { 
     currentUser: ($q) => { 
      var deferred = $q.defer(); 

      Meteor.autorun(function() { 
      if (!Meteor.loggingIn()) { 
       if (Meteor.user() == null) { 
       deferred.reject('AUTH_REQUIRED'); 
       } else { 
       deferred.resolve(Meteor.user()); 
       } 
      } 
      }); 

      return deferred.promise; 
     } 
     } 
    }); 

的決心部分將拒絕該路線(參見下面的處理程序) ,並確保Meteor.user()在激活路由之前完全加載。

將這個處理程序在你的.RUN方法:

function run($rootScope, $state) { 
    'ngInject'; 

    $rootScope.$on('$stateChangeError', 
    (event, toState, toParams, fromState, fromParams, error) => { 
     console.log("$stateChangeError: "+error); 
     if (error === 'AUTH_REQUIRED') { 
     $state.go('login'); 
     } 
    } 
); 
} 

將您重定向到登錄頁面(或您選擇的任何其他頁面)

+0

大,感謝邁克! – DJDMorrison