2012-02-13 2 views
2

Я пишу приложение, основанное на Express.js, при использовании Everyauth для аутентификации.Express.js: как обойти Everyauth для определенных маршрутов?

Для инициализации everyauth, я использую:

app.use(everyauth.middleware()); 

Я хотел бы перепускной аутентификации для определенных маршрутов. В частности, я заметил, что findUserById вызывается для каждого запроса, и я бы хотел пропустить его для определенных маршрутов (например, без аутентификации для/getImage).

Возможно ли это?

ответ

2

Вы можете обернуть everyauth.middleware() обратного вызова вручную.

var auth = everyauth.middleware(); 
app.use(function(req, res, next) { 
    if (shouldAuthRequest(req)) { 
    // call auth, as if it was part of the route 
    auth(req, res, next); 
    } else { 
    // ignore auth 
    next(); 
    } 
}); 

Это не что иное, как обернутое промежуточное ПО.

+0

Спасибо Tharabas. К сожалению, это не сработает. Он говорит, что auth() не является функцией. Я попробовал напрямую обращаться к anyauth.middleware(), но он не вызывает next(), и поэтому он не обрабатывает никакого запроса. –

1

Начиная с 0,4.5, everyauth.middleware должен называться с помощью объекта Экспресс app. Таким образом, вы можете создать обернутый MiddleWare таким образом:

var my_auth_middleware = function(app) { 
    var auth = everyauth.middleware(app); 
    // a custom middleware wrapping everyauth 
    var middleware = function(req, res, next) { 
    if (shouldAuthRequest(req)) { 
     // go through the everyauth middleware 
     auth(req, res, next); 
    } else { 
     // bypass everyauth 
     next(); 
    } 
    }; 
    // these allow the middleware to be "mounted" by Express 
    middleware.set = true; 
    middleware.handle = middleware; 
    middleware.emit = auth.emit; 
    // return our custom middleware 
    return middleware; 
}; 

, а затем добавить обернутый промежуточное программное обеспечение в стек с

app.use(my_auth_middleware(app)); 
+0

Эй, можете ли вы добавить источник обновленного API тоже? – kiddorails

+0

kiddorails, я использую ветвь [# express3] (https://github.com/bnoguchi/everyauth/tree/express3) для каждого пользователя, а источником метода 'everyauth.middleware' является [здесь] (https : //github.com/bnoguchi/everyauth/blob/express3/index.js#L24-52). Я не уверен, как используется объект 'app', но оба README из ветвей' master' и 'express3' предполагают, что они должны быть переданы' everyauth.middleware' – davb

Смежные вопросы