什么是对 Express 4 路由器上的某些路由进行身份验证的更好方法?
Posted
技术标签:
【中文标题】什么是对 Express 4 路由器上的某些路由进行身份验证的更好方法?【英文标题】:What is a better way to authenticate some of the routes on Express 4 Router? 【发布时间】:2014-10-25 12:17:23 【问题描述】:我正在使用 Express 4,其中有一条受 passport.js 保护的路线,如下所示:
var media = require('express').Router();
media.get('/', function(req, res)
// provide results from db
);
media.post('/', passport.authenticate('bearer'), function(req, res)
// This route is auth protected
);
所以 - 获取收集路由(大部分)不应该为我保护,而创建/更新路由应该。但这需要我将护照传递给我的所有路由文件(到目前为止我有 7 个),然后将其作为中间件添加到其中的一些文件中。
我喜欢你可以这样做的版本:
var router = require('./my-router');
app.use('/api/route', passport.authenticate('bearer'));
app.use('/api/route', router);
但这需要对我的所有路线进行身份验证。
有没有比通关护照更好的办法?
【问题讨论】:
【参考方案1】:您可以将路由器分成受保护/不受保护,并在受保护路由上调用中间件。
var express = require('express'),
media = express.Router(),
mediaProtected = express.Router();
media.get('/', function(req, res)
// provide results from db
);
mediaProtected.post('/', function(req, res)
// This route is auth protected
);
module.exports =
protected: mediaProtected,
unprotected: media
;
然后你就可以了
var router = require('./my-router');
app.use('/api/route', passport.authenticate('bearer'), router.protected);
app.use('/api/route', router.unprotected);
【讨论】:
哇,本,这真的很聪明!我只需要修复那里的命名。 这将是天才,只是当路由路径相同时它不起作用。我已经在 express4、passport 0.3.2 上尝试过同样的实现,并且对身份验证的检查遵循路由路径,而不是路由器实例。在这种情况下,我的所有路线都受到保护。 路由路径相同就不行了,怎么知道你要使用哪一个呢?您定义的第一条路线将优先。 @BenFortune 你的最终解决方案是什么?以上是关于什么是对 Express 4 路由器上的某些路由进行身份验证的更好方法?的主要内容,如果未能解决你的问题,请参考以下文章
NodeJS + Express - 将会话中间件应用于某些路由