Референт HTTP-запроса в маршрутизаторе Meteor Iron

StackOverflow https://stackoverflow.com//questions/23033135

  •  21-12-2019
  •  | 
  •  

Вопрос

У меня есть маршрут на стороне сервера в моем приложении Meteor, где я могу получить, например, IP-адрес клиента:

this.route('foo', {
    where: 'server',
    path: '/bar',
    action: function () {
      var ip = context.request.connection.remoteAddress;
    }
  });

Как я могу получить доступ к референт поле?Нужно ли мне использовать Заголовки метеоров?

Это было полезно?

Решение

Вы можете напрямую получить доступ к объекту Connect Chain Chast, который имеет заголовки:

this.request.headers['referer']

Вот так:

Router.map(function () {
    this.route('foo', {
        where: 'server',
        path: '/bar',
        action: function () {
            console.log("All headers:", this.request.headers);
            console.log("Referer:", this.request.headers['referer']);
        }
    })
});
.

Другие советы

У меня только что была такая же проблема, и после еще некоторого копания я выяснил, что если исходная страница защищена (HTTPS), браузер не отправит ссылку.

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

Итак, код в моем маршруте для блокировки прямых запросов к этому маршруту с других веб-сайтов теперь выглядит следующим образом:

action: function () {
  var self = this;
  var host = self.request.headers.host;
  var referer = self.request.headers.referer;
  var regex = new RegExp("^http(?:s)?://" + host);

  if(typeof self.request.headers.referer !== "undefined" && !regex.test(referer)) {
    Meteor.log.error("Access blocked from " + referer);
    self.response.statusCode = 403;
    self.response.end(Handlebars.templates['403']());
    return;
  }
}

Если ссылка установлена, она должна соответствовать текущему имени хоста.

Вы можете сделать документ .referrer, чтобы получить эту информацию

В качестве альтернативы вы можете использовать историю API: history.go (-1);

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top