これはしばらくは可能かどうかを調べていて、何も見つかりませんでした。パスポートOAuthベアラOR isAuthenticated
基本的に私はPassportを使用してユーザー認証を処理しています。もちろんNode.jsとExpressを使ってサーバーサイドのものを処理します。また、oauth2orizeを使用してOAuthを許可し、API呼び出しを処理しています。
API呼び出しの場合、私はpassport.authenticate('bearer', { session: false })
を実行するミドルウェアcontrollerClient.isBearerAuthenticated
を使用します。その後、それはオフになり、passport.use("bearer", new BearerStrategy)
の内部で関数を実行します。トークンが有効かどうかを基本的にチェックし、コールバック関数を呼び出します。
APIリクエストではなく通常のウェブページの場合、次のミドルウェアを実行して認証をチェックします。
function isLoggedIn(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect('/');
}
だから私の問題です。ベアラトークンがある場合は、私のAPIコールにアクセスできるようにしますまたはreq.isAuthenticated()
= trueです。現在、isLoggedIn
ミドルウェアまたはcontrollerClient.isBearerAuthenticated
ミドルウェアを使用するかどうかを選択する必要があります。私はそれらを似たようなやり方で組み合わせる方法を見つけようとしています。
私は複数のミドルウェア機能を持つことを考えていたので、isLoggedIn
を呼び出してからcontrollerClient.isBearerAuthenticated
を呼び出しました。しかし、それはコールバック関数が呼び出され、両方が呼び出されるという問題があるようです。私はまた、次のミドルウェア機能をスキップして次のものに行く方法があるかどうかを調べるために調査していましたが、それについても何も見つかりませんでした。
私は最善の策は、req.isAuthenticated()
= trueの場合controllerClient.isBearerAuthenticated
をスキップする方法を把握することだと思います。これを行うより良い方法があるかもしれません、もしそうなら、私はそれを聞きたくなります。
しかし、ユーザーがreq.isAuthenticated()
ORcontrollerClient.isBearerAuthenticated
経由autheroizedされているかどうかをチェックするためのミドルウェアを使用する方法上の任意の提案ですか?またはこれを達成する最良の方法は何ですか?
もう1つ注意してください。私は以前にthis質問をして、
passport.authenticate
は実際に 認証を処理することを意味していることを知りました。 それ以外の場合は、 のパスポート戦略の配列でpassport.authenticate
を使用します。 connect-ensure-loginを使用すると、私は今connect-sure-loginまたはcontrollerClient.isBearerAuthenticated
を使用しているのと同じ問題が発生します。
ありがとうございます。あまり前もって!