Rails - скрыть URL файла от пользователей (rails 3.1 + carrierwave + хранилище google для разработчиков) - PullRequest
1 голос
/ 31 января 2012

Я создал приложение, развернутое на heroku, которое использует carrierwave для хранения всех загруженных файлов, и я установил хранилище google для разработчиков, чтобы хранить эти файлы там.

Пока здесь все работает нормально, но я бы хотел, чтобы файлы показывались приватно, т.е. пользователь должен быть авторизован для просмотра. В среде разработки все работает очень хорошо.

Чтобы скрыть URL-адрес исходного файла от пользователей, я принял следующие решения:

инициализаторы / carrierwave.rb

CarrierWave.configure do |config|
  if Rails.env.production?
    config.storage = :fog
    config.fog_credentials = {
      :provider                         => 'Google',
      :google_storage_access_key_id     => 'xxx',
      :google_storage_secret_access_key => 'yyy'
    }
    config.fog_directory = 'wwww'
  else
    config.storage = :file
  end
end

контроллер

Получает содержимое файла, чтобы скрыть его путь и имя от посторонних глаз

def get_file
  if Rails.env.production?
    redirect_to URI.encode @media_asset.attachment_url
  else
    send_file ("public/"+@media_asset.attachment_url.to_s), 
          :type => @media_asset.attachment_content_type,
          :length => @media_asset.attachment_file_size,
          :status => "200 OK",
          :x_sendfile => true,
          :filename => "media_asset",
          :disposition => 'inline'
  end
end

, видимо, это бы сработало, но с помощью обычного инструмента для разработки браузеров все увидят путь к хранилищу Google и смогут получить доступ ко всем файлам.

У вас есть подсказка, как решить эту проблему, возможно ли вообще использовать хранилище Google для разработчиков?

заранее спасибо,

Ответы [ 2 ]

0 голосов
/ 21 марта 2012

Вы можете использовать недавно выпущенную функцию подписанных URL-адресов (https://developers.google.com/storage/docs/accesscontrol#Signed-URLs), чтобы сделать это в Google Cloud Storage.

0 голосов
/ 01 февраля 2012

У ваших пользователей есть аккаунты Google?Если это так, вы можете использовать аутентифицированный механизм загрузки:

https://developers.google.com/storage/docs/authentication#cookieauth

...