2014-01-15 42 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

相关问题