在Express app config中禁用会话

时间:2013-11-03 20:43:24

标签: node.js express passport.js

我正在使用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();

3 个答案:

答案 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));