2017-02-18 6 views
0

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

Я знаю, что мне нужно использовать authentication и компоненты авторизации. Однако в это время я застрял на авторизации. Моя цель - аутентифицировать использование 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': '[email protected]', 
    '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.

+0

Что вы пытаетесь сделать? 'app.authenticate' доступен только на клиенте (' перья-аутентификация/клиент'). – Daff

+0

В конечном счете, я пытаюсь запретить неавторизованным пользователям доступ к представлению на маршруте '/ admin'. По моему мнению, мне нужно сделать две вещи: 1) аутентифицировать пользователя (я хочу сделать это через логин OAuth Google) и 2) разрешить пользователю. Вопрос выше объясняет, как я застрял на # 1. – Gary

ответ

0

Для защиты маршрута от несанкционированного доступа вам необходимо связаться с follow the documented usage of express middleware пакетом 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'); 
    } 
); 
Смежные вопросы