2016-03-01 4 views
0

У меня есть веб-приложение и RESTful API для связи с БД. Интерфейс веб-приложения публикует/получает/помещает в бэкэнд с помощью Angular HTTP, который, в свою очередь, обрабатывает аутентификацию, отправляет/получает/помещает в api и возвращает результат. Бэкэнд аутентифицируется как администратор API через JWT, но аутентифицирует пользователей с сеансами на основе файлов cookie. Таким образом, API не имеет статуса, но веб-сервер использует состояния.RESTful API в Node.js - возможна ли фильтрация с авторизацией

Я искал варианты наличия механизма авторизации для фильтрации результатов запроса на основе пользователей. Например, у меня есть конечная точка вопросов, где я возвращаю список вопросов, только созданных компанией зарегистрированного пользователя.

1- я делал на веб-сервере (в основном фильтрации):

router.get('/questions', passportConf.isAuthenticated, function(req, res) { 
    restler.get(process.env.API_URL + '/questions/?organisation=' + req.user.organisation._id).on('complete', function(questions) { 
     res.json({ 
     data: questions 
     }); 
    }); 
}); 

2- Однако другой вариант поставленные вопросы конечную точку вложен в организации конечной точки пользователя, такие как:

/user/organisation/questions 

3- Или в принципе я могу поместить пользователя в тело запроса, сделанного в API, который будет фильтроваться на основе организации пользователя, который находится в теле запроса.

4 Наконец, я могу пропустить сеанс аутентификации на основе файлов cookie на веб-сервере, сделать мой запрос непосредственно в API из интерфейса и аутентифицировать пользователей с помощью JWT (что то же самое, как фильтровать вопрос в первой точке).

Я довольно новыми для Node.js и мне было интересно, если есть модуль или обычная практика для обработки особенно фильтрации в 1 или 4.

+0

Я предполагаю, что restler является маршрутизатором? Или имя приложения nodejs? – sarker306

+0

@ sarker306 Это клиентская библиотека HTTP. https://github.com/danwrong/restler Этот блок находится в самом маршрутизаторе, добавив информацию о организации в запрос, сделанный в API. –

ответ

-1

Пожалуйста, обратите внимание, что это только ответ от пользователя, который имеет пытался следовать практике шаблонов.

Я использую Экспресс-рамки. Используя express, вы можете обрабатывать HTTP-запросы довольно легко, и это одна из самых популярных фреймворков для веб-разработки с использованием Nodejs.

Чтобы решить проблему авторизации, я бы добавил промежуточное ПО (которое может быть функцией), что сделало бы фильтрацию возможной. Например, если router этого имя маршрутизатора, который будет обрабатывать все запросы и ответы, я хотел бы добавить следующий код в router.js, файл, в котором будет сохранена весь маршрутизатор, реализующая логика:

router.use(function isAuthorized(req, res, next){ 
    // Add your filtering code here 
}); 

В этом дело было бы,

router.use(passportConf.isAuthenticated); 

Используйте этот раз, и каждый удар в маршрутизаторе должны пройти через этот ППО.

Теперь мы пытаемся включить 'GET' запрос:

var http = require('http'); //basic node.js module, needed for handling http requests 

router.get('/questions', function(req, res) { 
    var url = process.env.API_URL; 
    var opt = {host: url, path : '/questions/?organisation=' + req.user.organisation._id} 
    http.request(opt, function(questions){ 
     res.json({data: questions}); 
    }).end(); 
}); 
+0

Это не дает ответа на мой вопрос удаленно, и API_URL начинается с http://api.ABC.com. В основном это какая-то другая виртуальная машина в моей сети. Я не вижу, как добавление косой черты облегчит мне жизнь. –

+0

В основном я пытаюсь продемонстрировать, что вам не нужно использовать другой модуль для обработки http-запросов, если вы используете Express.Перезагрузите, чтобы получить обновленный ответ. – sarker306

+0

Я не «обрабатываю» HTTP-запрос, я «делаю» HTTP-запрос на свой сервер API. –

Смежные вопросы