首页 文章

亚马逊访问密钥显示在Carrierwave和Fog的URL中

提问于
浏览
3

我只是将我通过Carrierwave上传的图像存储到我的Rails 3.1应用程序中通过雾宝石使用亚马逊s3 . 在添加图像时,当我单击应用程序中的图像时,URL将提供我的访问密钥和签名 . 这是一个示例URL(XXX用信息替换了字符串):

https://s3.amazonaws.com/bucketname/uploads/photo/image/2/IMG_4842.jpg?AWSAccessKeyId=XXX&Signature=XXX%3D&Expires=1332093418

这是在开发中发生的(localhost:3000)以及当我使用heroku进行 生产环境 时 . 这是我的上传者:

class ImageUploader < CarrierWave::Uploader::Base
 include CarrierWave::RMagick
 storage :fog
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
  process :convert => :jpg
  process :resize_to_limit => [640, 640] 
  version :thumb do
    process :convert => :jpg
    process :resize_to_fill => [280, 205]
  end
  version :avatar do
    process :convert => :jpg
    process :resize_to_fill => [120, 120]
  end
end

我的config / initializers / fog.rb:

CarrierWave.configure do |config| 
  config.fog_credentials = { 
     :provider               => 'AWS', 
     :aws_access_key_id      => 'XXX', 
     :aws_secret_access_key  => 'XXX',
   } 
  config.fog_directory  = 'bucketname' 
  config.fog_public     = false
end

有谁知道如何确保这些信息不可用?

更新:添加视图和控制器代码:来自users / show.html.erb中的部分代码:

<% if @user.photos.any? %>
  <% for photo in @user.photos %>
    <li class="span4 hidey">
    <div class="thumb_box">
      <%=link_to(image_tag(photo.image_url(:thumb).to_s), photo.image_url.to_s,   
                                                       :class=>"lb_test") %>
      ...
    </div>    
    </li>
  <% end %>
<% end %>

users_controller.rb:

def show
   @user = User.find(params[:id])
 end

更新:添加从URL中删除访问密钥信息时获得的错误页面:

This XML file does not appear to have any style information associated with it. The document tree is shown below.

<Error>
 <Code>AccessDenied</Code>
  <Message>Access Denied</Message>
   <RequestId>47077D6EC13AD1D8</RequestId>
     <HostId>+HTeODcWTqv3gbRIAwf+lI6sPzfNTegDXjT9SnMdqrYr7gLD1TD0qN+OgMLwA1JO
     </HostId>
 </Error>

3 回答

  • 6

    你看到的是一个签名网址 . 如果没有完整的URL(包括密钥,签名,过期),您将获得拒绝访问权限 . 它完全按照预期工作 . 而且我猜测密钥只是一个公钥,没有你的私钥(AWS有),这是没用的 .

  • -1

    去掉

    config.fog_public     = false
    

    这是一个非默认值:)

  • 4

    尝试使用photo.image.url而不是photo.image_url . 这就是我正在使用的 .

相关问题