Референт HTTP-запроса в маршрутизаторе Meteor Iron
-
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);