Перья - Аутентификация и Авторизация
Я создал приложение, используя Перья. Я давно пользуюсь этим приложением. Он успешно ведет блог и некоторые другие веб-страницы. Тем не менее, теперь я достиг точки, где мне нужно защитить некоторые из моих маршрутов. Например, я хочу иметь маршрут для моих административных действий (/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');
}
);