RoR: хранить HTTP_AUTHORIZATION в сеансе для доступа к защищенной папке .htaccess - PullRequest
0 голосов
/ 26 января 2010

В моем приложении на Ruby on Rails я пытаюсь защитить часть общей папки с помощью функции apache .htaccess, чтобы предотвратить доступ из файлов к лицам, не прошедшим проверку подлинности. Поэтому я поместил файл .htpasswd для защиты этой папки и соответственно настроил apache, и эта работа ... запрашивает у меня логин / пароль для доступа к файлам.

Я использую плагин restful аутентификации для аутентификации пользователей по их учетным данным. Моя идея была сделать:

  1. аутентифицировать пользователя
  2. если пользователь аутентифицирован, установите Переменная HTTP_AUTHORIZATION и хранить его, чтобы я мог получить доступ к файлы защищенной папки без браузер подсказывает мне Логин / пароль

Что я сделал, в контроллере приложения:

helper_method :set_http_auth 

def set_http_auth  
  request.env['HTTP_AUTHORIZATION'] = AutionController::HttpAuthentication::Basic.encode_credentials("myLogin","myPassword")  
end

Затем вызовите before_filter в контроллере для установки значения.

Кажется, что он выполняет свою работу, я установил HTTP_AUTHORIZATION в свой массив request.env, но, к сожалению, браузер все еще запрашивает у меня login / passwd, если я пытаюсь получить файл из защищенной папки (например, изображения).

Если у кого-то есть идея, я весь в ушах :) Спасибо!

Ответы [ 2 ]

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

Осмотрел различные решения, лучше всего использовать mod_xsendfile:
sudo apt-get install mod_xsendfile

before_filter :login_required

def download
    send_file '/home/railsway/downloads/huge.zip', :type=>"application/zip", :x_sendfile=>true
end

Это не связывает ваш процесс rails (apache обслуживает файлы вне public dir после получения заголовка x-sendfile). Так что это самый эффективный и довольно простой способ защитить ваши файлы. Используйте свою собственную аутентификацию по желанию. Nginx и lighthttpd имеют похожие решения ...

0 голосов
/ 28 января 2010

Я нашел решение, которое могло бы подойти: Здесь , но это потребовало бы серьезных изменений в моем приложении.

Поэтому вместо этого я решил защитить папку с помощью обнаружения файлов cookie Apache, а затем проверить, существовал ли файл cookie при попытке доступа к файлу (файл cookie устанавливается при аутентификации пользователя).

Напишите мне, если хотите подробнее ...

...