2012-02-13 7 views
2

私はExpress.jsに基づいてアプリケーションを作成していますが、認証にはEveryauthを使用しています。 everyauthを初期化するExpress.js:特定のルートの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()は関数ではありません。私はeveryauth.middleware()を直接代わりに呼び出そうとしましたが、next()を呼び出さないため、リクエストを処理しません。 –

1

0.4.5から、appオブジェクトでeveryauth.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、私はeveryauthの[#express3](https://github.com/bnoguchi/everyauth/tree/express3)ブランチを使い、 'everyauth.middleware'メソッドのソースは[ここ]です(https ://github.com/bnoguchi/everyauth/blob/express3/index.js#L24-52)。私は 'app'オブジェクトがどのように使われているのかよくわかりませんが、' master'と 'express3'ブランチの両方のREADMEは' everyauth.middleware'に渡すべきだと示唆しています – davb

関連する問題