В моем файле rout.rb мой корневой каталог установлен так:
root :to => "portal#index"
В контроллере портала Devise выполняет шаги для аутентификации пользователя
before_filter :authenticate_user!
и перенаправляет пользователей в / users / sign_in
Все это прекрасно работает ...
Я вижу много попыток вторжения в мои журналы, которые имеют этот тип URL
example.com/?gclid=CPTKkZqfu6kCFVOFzAodLUa9-Q
Я хочу регистрировать посетителей сайта WITHIN в приложении Rails и хочу использовать эту строку, чтобы отличить реальных посетителей от попыток вторжения
Но я теряю эту строку запроса из-за перенаправления на /users/sign_in...
Есть ли способ перехватить эту начальную строку запроса в приложении Rails, кроме как в журналах веб-сервера?
Одна мысль ... Я использую Rails3, поэтому я использую Rack под капотом - могу ли я получить доступ к строке через Rack?
спасибо
Вот мой ответ на мой собственный вопрос - StackOverflow не позволяет мне публиковать ответ в течение 8 часов?!?!? но я могу отредактировать свой оригинальный вопрос ... вздох
В моем application_controller я добавил этот метод, который сохраняет текущий request.url и предыдущий в сеансе
def store_request_url_in_session
session['request_url_prev'] = session['request_url']
session['request_url'] = request.url
end
Затем я вызываю до моего аутентификационного вызова
before_filter :store_request_url_in_session
before_filter :authenticate_user!
Теперь это вызывается при каждом действии, но это просто назначение двух строк
В моем session_controller (подкласс от контроллера устройства по умолчанию) я добавляю этот фильтр
before_filter :log_http_request
- это то, что записывает запись в журнал, только когда текущее действие 'sign_in'
def log_http_request
if request.url =~ /sign_in/
logger.info("**** #{request.remote_ip} | #{session['request_url']} | #{session['request_url_prev']} ")
end
session.delete('request_url')
end
Это не элегантно, но дает мне то, что мне нужно прямо сейчас. Итак, попытка вторжения:
http://localhost:3000/?gclid=CPTKkZqfu6kCFVOFzAodLUa9-Q
зарегистрирован как
**** 127.0.0.1 | http://localhost:3000/users/sign_in | http://localhost:3000/?gclid=CPTKkZqfu6kCFVOFzAodLUa9-Q
Чистые решения приветствуются!