2014-11-23 90 views
0

(NOOB ALERT!剛剛從微軟過渡到MEAN)具有MEAN堆棧的安全路線和模板?

任何人都有一個堅實的模式的例子,使用不同的路線/佈局/模板與公共和私人領域的MEAN堆棧?我已經嘗試過嵌套控制器,但是這帶來了路線問題。我還希望不要複製Express和客戶端應用程序中的所有路線。在一個完美的場景中,某些相關文件夾應該被認爲是「私人」的,而其他人則是「公開」的,併爲每個區域使用不同的佈局(包裝)。未通過身份驗證的用戶應限制在公共區域。

在非SPA/MS世界中,一切都維持在服務器端。對於保護文件,預渲染等有一定的幫助。因此,我注意到使用Jade建立區域的誘惑可能比我應該更多。即使在我寫這篇文章的時候,我開始覺得客戶端看不到什麼應該是服務器端,除了使用Node應用程序進行路由,數據編組以及保護路由本身的初始佈局和索引之外。

注意:此時使用Passport進行身份驗證。

感謝您的時間和詳細的答案。

回答

1

只是一個快速的想法:

通過獲取具有特定文件夾的路線服務你的partials。例如,您可以在partials文件夾中擁有一個公共和受保護的文件夾。

-app 
    --partials 
    ---public 
    ---protected 

然後在您的受保護路由上添加身份驗證中間件。

未受保護:

app.get('/partials/public/*', function(){ //send partial html here }) 

保護:

app.get('/partials/protected/*', passport.authenticate, function(){ //same as above }) 


最後,在你的角度應用程序(希望你已經設置相應的templateURLs),添加一個httpInterceptor來檢查響應是401,如果是的話,重定向到登錄頁面 - >在這裏找到:Credits to Fredrick Nackstad。這裏是重要的片段

var interceptor = ['$location', '$q', function($location, $q) { 
    function success(response) { 
     return response; 
    } 

    function error(response) { 

     if(response.status === 401) { 
      $location.path('/login'); 
      return $q.reject(response); 
     } 
     else { 
      return $q.reject(response); 
     } 
    } 

    return function(promise) { 
     return promise.then(success, error); 
    } 
}]; 

$httpProvider.responseInterceptors.push(interceptor); 


這將允許你讓角已經訪問靜態內容,同時還具有在被投放了哪些控制。希望這是有幫助的。