Rails - скрыть URL-адрес файла от пользователей (rails 3.1 + CarrierWave + хранилище Google для разработчиков)

Я создал приложение, развернутое на героку, которое использует несущую волну для хранения всех загруженных файлов, и я установил хранилище 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 для разработчиков?

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


person brunomac    schedule 31.01.2012    source источник


Ответы (2)


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

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

person Navneet    schedule 01.02.2012
comment
Идея состоит в том, чтобы иметь учетные записи приложений. На самом деле я использую devise в качестве жемчужины аутентификации, позже цель состоит в том, чтобы иметь несколько вариантов входа, таких как facebook, twitter, google и т. д., но в настоящее время все, что имеет значение, это наличие пользователей приложения. - person brunomac; 01.02.2012
comment
Перешел на s3 и до сих пор решаю этот вопрос. - person brunomac; 02.02.2012
comment
Хотя ответ на самом деле неверен, я собираюсь принять его, потому что хочу перейти к другому поставщику облачных хранилищ. - person brunomac; 03.02.2012

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

person Navneet    schedule 21.03.2012