2016-04-30 28 views
0

在我的angularjs應用中,我有路由/#/tasks,它從/tasks url中獲取任務。如果用戶手動轉到/tasks網址,他會獲取json數據。我應該阻止顯示json數據給用戶嗎?最佳做法是什麼?例如,在後端我可以檢查請求是否是ajax。如果沒有 - 重定向到基本網址。後端 - laravel 5Angularjs路由:阻止用戶手動獲取json數據

回答

1

從具有關鍵字'阻止用戶'的帖子標題看來,您似乎需要某種邏輯來爲特定用戶定義訪問權限。

你可以堅持之前用戶訪問過的路線解決授權邏輯。 爲此,您可以利用.when()方法的$routeProviderresolve屬性。

根據該docs,將resolve屬性是...

依賴性的可選地圖應當注入到控制器。如果這些依賴關係中的任何一個都是承諾,那麼路由器將等待它們全部被解析或者在控制器被實例化之前被拒絕。

如果所有的承諾都被成功解析,解析的承諾的值被注入並且觸發$ routeChangeSuccess事件。如果任何承諾被拒絕,$ routeChangeError事件被觸發。

的決心發生在函數(如注射依賴)每一個都可以返回承諾,如果有任何的承諾遭到拒絕,引,則會引發錯誤,並從字面上看,無論是路線也不視圖被加載。

要使授權邏輯正常工作,您需要對某些後端功能/服務執行一些API調用,以解決用戶被允許用於路由或拒絕他/她的請求。

.when('/tasks', { 
resolve: { 
    authorize: function(authService){ 
      //some api call to get either acceptance (e.g. status code 200) or rejection (status code 500) for the user being authorized 
      return authService.authorize(); 
     } 
    }, 
    controller: function(){ 
     //route controller logic 
    } 
}) 

另外,如果你想也想在承諾的失敗進行的東西,你可以通過簡單地鏈接與catch()處理器的承諾這樣做,並拋出一個錯誤來強制拒絕從返回的承諾catch()本身。

.when('/tasks', { 
resolve: { 
    authorize: function($location, authService){ 
     //some api call to get either acceptance or rejection for the user being 
     return authService.authorize() 
      .then(function(){ 
       //some logic on success of the promise 
      }) 
      .catch(function(){ 
       $location.path('/auth/login/'); 
       throw 'Authorization error'; 
      }); 
     } 
    }, 
    controller: function(){ 
     //route controller logic 
    } 
})