如何使用Express为某些路由管理Passport JS的会话?

时间:2014-05-20 05:44:10

标签: javascript node.js session express passport.js

我的 express < STRONG>。在它,我的整个路由定义取决于使用 node.js 的MongoDB连接,但Passport使用的模型是通过 Passport 通过另一个连接完成的。我提到这两个细节因为我认为它也应该以更好的方式编码。

然而,主要的问题是,即使Passport正在进行工作,我仍然可以直接转到mongo-db,无论我没有首先登录

当有人试图访问mongoose时,如果首先未执行登录和身份验证,则应将其重定向到起始页。

我关心它的安全实施,我也希望在会话期间获得有关用户的一些信息。

我对我应该尝试的内容,cookie,会话等感到很困惑。除了在新的快速版本中,中间件的工作与以前不同。

这是我的localhost/registro

localhost/registro

这些是我的Passport声明:

server.js

1 个答案:

答案 0 :(得分:1)

表达“链”路线方法。在Express.js中保护路由的基本思想是在允许请求进入预期路由之前有一个检查a&amp; a的方法。有几种方法可以做到这一点:

方法1:将auth方法添加到路径声明

function requireAuth(req,res,next){
   if user is authenticated
      next();
   else
      res.send(401);
}

app.get('/registro', requireAuth, function(request, response) {
            response.sendfile('public/html/registro.html')
        })

方法2:为您的身份验证声明路由处理程序

app.get('/registro', function(req,res,next){
       if user is authenticated
          next();
       else
          res.send(401);
})

app.get('/registro', function(request, response) {
                response.sendfile('public/html/registro.html')
            })

方法3:使用app.use()而不是动词

使用此方法,您需要考虑app.router何时插入到中间件中。

编辑1:声明require auth方法的位置 如果您计划将路由处理程序放在多个.js文件中,最好将您的require auth mehtod放在一个单独的.js文件中,并在适当的时候要求它。

否则,您可以将其与其他所有内容放在同一个文件中。

编辑2:会话如何在Express.js和Passport.js中运行

Passport.js documentation开始,您首先需要在护照会话之前配置快速会话:

app.use(express.session({ secret: 'keyboard cat' }));  
app.use(passport.initialize());   
app.use(passport.session());

注意:您应该考虑使用内存存储以外的其他内容进行会话管理。

与serializeUser和deserializeUser方法一起,此时Passport将在请求中放置.user。

您还可以使用req.isAuthenticated()来确定用户是否已通过身份验证。

注意2:我在使用Passport-Saml时使用serializeUser和deserializeUser方法时遇到了问题。如果是这种情况,请自行管理会话。