Passport.js: как защитить ВСЕ маршруты? - PullRequest
0 голосов
/ 10 февраля 2019

Я следовал за документацией для passport.js с помощью passport-local: http://www.passportjs.org/docs/authorize/

Когда я отправляю своих пользователей на /login, они проходят аутентификацию, но нигде в этом документе я не могу найти, как авторизовать моих пользователей.

Я пробовал это, но это дает мне bad request:

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

});

Я ищу способ защитить все мои страницы одновременно.Я работаю с Express 4.16 и использую разные файлы маршрутов для разделения моих маршрутов.

Сэм

Ответы [ 4 ]

0 голосов
/ 11 февраля 2019

Поскольку я хотел, чтобы ВСЕ маршруты (кроме маршрутов входа в систему вне курса) проходили авторизацию, я решил это следующим образом:

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);
0 голосов
/ 10 февраля 2019

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

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('/');
}
0 голосов
/ 10 февраля 2019

вы можете использовать middleware с небольшим трюком для переключения между стратегиями

пример:

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


const authenticationMiddleware = (whiteList =[]) => (req, res, next) => {
    if(whiteList.find(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');
0 голосов
/ 10 февраля 2019

Я не уверен, что вы подразумеваете под «но нигде в этом документе я не могу найти, как авторизовать моих пользователей».Passportjs не авторизует ни одного пользователя.Это промежуточное ПО аутентификации.Авторизация отличается от аутентификации.

Я думаю, что вы ищете промежуточное ПО уровня приложения.Вы должны использовать app.use, чтобы аутентификация работала для каждого запроса к серверу.Вы можете прочитать больше об этом здесь.https://expressjs.com/en/guide/using-middleware.html#middleware.application

...