我正在使用Express和Passport一起使用Node.js API应用程序,我可以通过将{session:false}
传递给passport.authenticate
来禁用会话,但有一种方法我可以在一个地方执行此操作,所以我不要重复600次?
var app = express();
app.configure(function() {
app.use(express.bodyParser());
app.use(passport.initialize());
});
app.get('/users', passport.authenticate('hash', {session:false}), controllers.users.getAll);
app.get('/users/me', passport.authenticate('hash', {session:false}), controllers.users.getCurrentUser);
// and so on...
如果我能这样做会很棒:
app.donotuse(sessions).thanks();
答案 0 :(得分:4)
只需将结果保存在变量中并重复使用:
var PassportAuthenticateMiddleware = passport.authenticate('hash', {session:false});
...
app.get('/users', PassportAuthenticateMiddleware, controllers.users.getAll);
app.get('/users/me', PassportAuthenticateMiddleware, controllers.users.getCurrentUser);
(或者@hexacyanide建议全球使用中间件,如果这是您设置中的选项)
或者,你可以使用类似的东西:
app.all('/users*', passport.authenticate('hash', {session:false}));
app.get('/users', controllers.users.getAll);
app.get('/users/me', controllers.users.getCurrentUser);
这将过滤所有请求(而不是.all
,您也可以使用.get
),其URL以/users
开头,以通过身份验证中间件运行。
答案 1 :(得分:3)
身份验证器本身就是中间件。因此,您可以全局分配。
app.use(express.bodyParser());
app.use(passport.initialize());
app.use(passport.authenticate('hash', {session:false}));
答案 2 :(得分:1)
我猜你有一些需要会话的路线。可以全局设置,但这不适用于您的情况。你可以做的是改进代码:
var controller = function(controller) {
return function(req, res, next) {
passport.authenticate('hash', {session:false})(req, res, next);
controller(req, res, next);
}
}
app.get('/users', controller(controllers.users.getAll));
app.get('/users/me', controller(controllers.users.getCurrentUser));