Перья - Аутентификация и Авторизация

Я создал приложение, используя Перья. Я давно пользуюсь этим приложением. Он успешно ведет блог и некоторые другие веб-страницы. Тем не менее, теперь я достиг точки, где мне нужно защитить некоторые из моих маршрутов. Например, я хочу иметь маршрут для моих административных действий (/admin), но я хочу, чтобы только определенные пользователи имели доступ.

Я знаю, что мне нужно использовать компоненты аутентификации и авторизации. Однако в это время я застрял на авторизации. Моя цель - аутентификация с использованием OAuth через Google. Тем не менее, чтобы преодолеть мою проблему аутентификации, я был бы счастлив, просто используя жестко запрограммированное имя пользователя / пароль, чтобы получить /admin маршрут заблокирован (нет, он не развернут).

На данный момент у меня есть

const app = feathers();
const routes = require('./routes');

app.configure(configuration(path.join(__dirname, '..')));

app.use(compress())
  .options('*', cors())
  .use(cors())
  .use(favicon( path.join(app.get('public'), 'favicon.ico') ))
  .use('/public', serveStatic(app.get('public'), staticFileSettings ))
  .use(bodyParser.json())
  .use(bodyParser.urlencoded({ extended: true }))
  .configure(routes)    
  .configure(hooks())
  .configure(rest())
  .configure(socketio())
  .configure(services)
  .configure(middleware)
  .configure(authentication())
;

// Setup the authentication strategy.
app.authenticate({
  type: 'local',
  'email': 'admin@feathersjs.com',
  'password': 'admin'
}).then(function(result){
  console.log('Authenticated!', result);
}).catch(function(error){
  console.error('Error authenticating!', error);
});

Моя проблема в том, что, как только я добавляю блок кода с app.authenticate, я получаю сообщение об ошибке при запуске приложения. Ошибка говорит:

TypeError: app.authenticate is not a function

Если я удалю app.authenticate(...); Мое приложение запускается нормально, но ничего не заблокировано. В моем файле./routes/index.js у меня есть:

app.use('/admin', function(req, res) {
    res.render('admin/index.html', {});
});    

Который, оказывает просто отлично. Это просто не ограничено для авторизованного и авторизованного пользователя. Что мне не хватает? Я пытаюсь понять, как пройти мимо app.authenticate ошибка.

1 ответ

Чтобы защитить маршрут от несанкционированного доступа, вам необходимо следовать документированному использованию промежуточного программного обеспечения Express, предоставляемого feathers-authentication пакет, который устанавливается, когда вы делаете feathers generate authentication,

Вот пример аутентификации /admin маршрут.

const auth = require('feathers-authentication');

app.use(
  '/admin',
  auth.express.authenticate('jwt'), // <-- this is a strategy, can local/jwt... etc
  (req, res, next) => {
    console.log("Request for '/admin'...");
    res.render('admin');
  }
);
Другие вопросы по тегам