我的 express
< STRONG>。在它,我的整个路由定义取决于使用 node.js
的MongoDB连接,但Passport使用的模型是通过 Passport
通过另一个连接完成的。我提到这两个细节因为我认为它也应该以更好的方式编码。
然而,主要的问题是,即使Passport正在进行工作,我仍然可以直接转到mongo-db
,无论我没有首先登录。
当有人试图访问mongoose
时,如果首先未执行登录和身份验证,则应将其重定向到起始页。
我关心它的安全实施,我也希望在会话期间获得有关用户的一些信息。
我对我应该尝试的内容,cookie,会话等感到很困惑。除了在新的快速版本中,中间件的工作与以前不同。
这是我的localhost/registro
:
localhost/registro
这些是我的Passport声明:
server.js
答案 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方法时遇到了问题。如果是这种情况,请自行管理会话。