2017-05-16 13 views
0

私はpassportjsとpassport-jwtでnodejsプロジェクトを設定しています。保護するパスごとにpassport.authenticateを指定できる場所がわかります。しかし、ログインと登録を除いてすべてのルータをロックダウンする方法はありません。私はexpress-jwtがexpress-unlessの使用を許している場所を見ています。これはこの機能を実現するようです。パスポートと同じような仕組みがありますか?もしそうなら、これはどのように達成されますか?NodeJS、passport-jwt:リスト以外のすべてのユーザーを認証します

答えて

0

実はあなたも、あなたのフィルタリング

const express = require('express'); 
const app = express(); 

function authenticateSomeRoutesMiddleware(req, res, next) { 
    if (/(login|register)/.test(req.originalUrl)) { 
     // No authentication needed 
     return next(); 
    } else { 
     // Option 1 => use default passport logic 
     // which respond with a 401 unauthorized status if authentication fails 
     passport.authenticate('jwt', { session: false}), function(req, res, next) { 
      // Do something now you know that the user has been authenticated 
      return next(); // this will call the next middleware on the stack 
     })(req, res, next); 

     // Option 2: use a custom callback to allow your application 
     // to handle success or failure 
     // As per passport spec: 
     // - If authentication failed, user will be set to false. 
     // - If an exception occurred, err will be set. 
     // - An optional info argument will be passed, containing additional details 
     // provided by the strategy's verify callback. 

     passport.authenticate('local', function(err, user, info) { 
      if (err) { 
       // Error in authentication process; handle it or call... 
       return next(err); 
      } 
      if (!user) { 
       // Authentication failed (based on your strategy's implementation) 
       // You can for example try again 
       return res.redirect('/login'); 
      } 

      // If you are using session to store the user call req.logIn() else call `return next()` directly 
      req.logIn(user, function(err) { 
       if (err) { return next(err); } 
       return next(); 
      }); 
     })(req, res, next); 
    } 
} 


// add this BEFORE your route definitions 
app.use(authenticateSomeRoutesMiddleware); 

// add all your routes here 
app.use('/login', function(req, res, next) { 
    // do something 
}); 
app.use('/register', function(req, res, next) { 
    // do something else 
}); 
app.use('/some/protected/route', function(req, res, next) { 
    // this will get called once the authentication process has been cleared 
}); 
//... 
を行うには、すべての時間を実行しますミドルウェアを登録できるようにする表現事実を使用することができます express-unless必要はありません。
関連する問題