Как настроить базовую аутентификацию (с сгенерированным значением) для маршрута Express.js? - PullRequest
0 голосов
/ 12 июля 2011

Мой сайт работает на узле и использует платформу Express. Моя цель - настроить прокси для получения данных из API Yahoo Placefinder (потому что они не предлагают ответ JSONP). Я хочу отправить запросы jquery ajax прокси и получить ответ API PlaceFinder.

Вот мой экспресс-маршрут:

app.get('/placefinder/:curr_address', function (req, res) {

var options = {
    host: 'where.yahooapis.com',
    port: 80,
    path: '/geocode?location=' + req.params.curr_address + '&flags=J&appid=[put app id here]'
};

var req = http.get(options, function (res2) {
    console.log("Got response: " + res2.statusCode);

    res2.setEncoding('utf8');
    res2.on('data', function (chunk) {
        console.log('BODY: ' + chunk);

        res.render('response', {
            response: chunk
        }); // res.render
    }); // on
}); // req
req.on('error', function (e) {
    console.log("Got error: " + e.message + "... path: " + options.host + options.path);
});
// write data to request body
req.write('data\n');
req.write('data\n');});

Приведенный выше код работает. Например, я могу посетить mywebsite.com/placefinder/123+fake+street,90210, и будет отображен ответ от API PlaceFinder.

Проблема в том, что каждый может посетить эту страницу и получить ответ от API PlaceFinder. Я не хочу этого Я только хочу, чтобы мои (ajax) скрипты имели доступ.

  1. Как я могу использовать некоторую базовую аутентификацию, чтобы разрешить только моим ajax-запросам доступ к mywebsite.com/placefinder/123+fake+street,90210 ... Я никогда не использовал базовую аутентификацию и не могу понять как применить это к этому делу.

  2. Или, есть ли какой-нибудь способ, которым я могу заблокировать каталог placefinder от любого внешнего доступа (вроде как apache .htacess)?

1 Ответ

1 голос
/ 19 июля 2011

Как я могу использовать базовую аутентификацию, чтобы разрешить только моим ajax-запросам доступ к mywebsite.com/placefinder/123+fake+street,90210 ... Я никогда не использовал простую аутентификацию и не могу понятьКак применить его к этому случаю.

Я не думаю, что вы должны использовать базовую аутентификацию, но вместо этого используйте сеансы .У TJ есть пример использования сеанса на https://github.com/visionmedia/express/tree/master/examples/session. Есть еще много примеров, которые вы должны изучить.Connect также имеет промежуточное ПО для обработки basic auth .Мне не нравится этот подход, потому что он не настолько безопасен, особенно когда он не используется за SSL.

Или есть какой-то способ, которым я могу заблокировать каталог placefinder от любого внешнего доступа (вроде какapache .htacess)?

В файле node.js каждое приложение запускается в отдельном процессе.Вы можете просто связать это host вместо INADDR_ANY.

app.listen ([порт [, хост]])

Привязать сервер приложений к указанному порту, по умолчанию 3000. Когда хостопущен, все соединения будут приняты через INADDR_ANY.

app.listen ();app.listen (3000);app.listen (3000, 'nnnn');

Вы также можете использовать node.js с NGinx.Чем, например, вы используете что-то вроде https://serverfault.com/questions/183884/nginx-protect-directory-with-password-except-for-specific-ips/183939#183939. NGinx очень мощный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...