2014-01-15 86 views
2

我有一個Node.js應用程序,其中我使用了Yeoman腳手架來處理Angular。我也使用ExpressJS作爲服務器端。Angularjs,Expressjs和passportjs用於在服務器端進行身份驗證檢查

所以基本上我的應用程序的結構是:

app 
    -->views 
     --> more files 
server.js 

結構比這更重,但是這是爲了保持它的簡單。

基本上我在服務器端使用PassportJS進行身份驗證。路由目前正在通過AngularJS路由參數進行。

我所遇到的一個問題,現在我需要通過一箇中間件的方法來進行身份驗證:

function ensureAuthenticated(req, res, next) { 
    console.log('authenticate=' + req.isAuthenticated()); 
    if (req.isAuthenticated()) { 
     return next(); 
    } 
    res.redirect('/') 
} 

我已創建在服務器端的app.get檢查,如果用戶試圖去的沒有登錄的管理頁面:

app.get('/admin', ensureAuthenticated, 
    function(req, res){ 
     console.log('get admin' + req.params); 
     res.sendfile(__dirname + '/app/views/admin/users.html'); 
    }); 

但它永遠不會去的方法。我究竟做錯了什麼?

任何建議將是偉大的。

回答

1
if (!req.isAuthenticated()) { 
      return res.send(401, 'User is not authorized'); 
     } 
     next(); 
+0

嗨,認證工程,如果我只是把/管理但我的網址是localhost:8888 /#/管理。它從來沒有擊中路線的快遞,如果我輸入的網址如圖所示 – tjhack

+0

localhost:8888 /#/ admin是角度領域,所以你應該改變你的邏輯我認爲即把你的看法在管理路徑 – Whisher

+0

我現在有一個進一步的問題是當我路由到管理頁面時,我按瀏覽器刷新,它試圖呈現頁面,但它表明沒有默認引擎被指定。我只是使用HTML網頁? – tjhack

0

它不工作的原因是因爲在客戶端配置路由時,angularjs locationprovider未設置爲htmlmode5。添加了以下行:

$locationProvider.html5Mode(true); 

這基本上從URL中刪除'#'。

+0

,但這樣做,你仍然在angularjs領域.... – Whisher

相關問題