NodeJS Passport.js:如何保护所有路由?

uurv41yg  于 2023-05-17  发布在  Node.js
关注(0)|答案(4)|浏览(108)

我使用passport-local遵循了passport.js的文档:http://www.passportjs.org/docs/authorize/
当我把我的用户发送到/login时,他们被认证了,但是在那个文档中没有任何地方可以找到如何授权我的用户。
我已经试过了,但这给了我一个bad request

router.get('/somepage', passport.authenticate('local'), function(req, res, next) {

});

我正在寻找一种方法来保护我所有的网页一次。我正在使用Express 4.16,并使用不同的路由文件来分割我的路由。
山姆

v6ylcynt

v6ylcynt1#

您可以使用middleware并使用一个小技巧来在策略之间切换
例如:

const allowUrl = ['public', 'nonprivate','home'];

const authenticationMiddleware = (whiteList =[]) => (req, res, next) => {
    if(whiteList.includes(req.baseUrl)) {
      next();
    }

    if (req.isAuthenticated()) {
      return next()
    }
    res.redirect('/');
}

app = express();
app.use(passort.initialize());
app.use(authenticationMiddleware(allowUrl));
app.use(apiRouter);

app.listen(3000, ()=> console.log('hello internet');
kkih6yb8

kkih6yb82#

您可以像下面这样添加中间件代码

router.get('/', isAuthenticated, function(req, res) {
   //your next function 
});
function isAuthenticated(req, res, next) {
  // do any checks you want to in here

  // CHECK THE USER STORED IN SESSION FOR A CUSTOM VARIABLE
  // you can do this however you want with whatever variables you set up
  if (req.user.authenticated)
      return next();

  // IF A USER ISN'T LOGGED IN, THEN REDIRECT THEM SOMEWHERE
  res.redirect('/');
}
z0qdvdin

z0qdvdin3#

由于我希望所有路由(除了偏离路线的登录路由)都能通过授权,我按如下方式解决了这个问题:

var ensureAuthenticated = function(req, res, next) {
    if (req.isAuthenticated()) return next();
    else res.redirect('/login')
}

// usersRouter contains all open routes like '/login':
app.use('/', usersRouter);

// From here on, all routes need authorization:
app.use(ensureAuthenticated);

app.use('/', indexRouter);
app.use('/api/foo', fooRouter);
app.use('/api/bar', barRouter);
nuypyhwy

nuypyhwy4#

我不知道你说的“但是在那个文档中我找不到如何授权我的用户”是什么意思。Passportjs不会授权任何用户。它是一个身份验证中间件。授权不同于身份验证。
我认为您正在寻找应用程序级中间件。您必须使用app.use来使对服务器的每个请求都进行身份验证。你可以在这里阅读更多。https://expressjs.com/en/guide/using-middleware.html#middleware.application

相关问题