2012-03-18 17 views
3

私は、Carrierswave経由でアップロードした画像を、Amazonのs3を使用して私のRails 3.1アプリケーションの霧の宝石を使ってローカルに保存しました。画像が追加されている間、アプリケーションで画像をクリックすると、そのURLからアクセスキーと署名が提供されます。ここではサンプルのURLは、(XXXが情報を持つ文字列を置き換え)です。これは、開発中に起こっているAmazonのアクセスキーがCarrierwaveとFogのURLに表示されています

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 /初期化子/ 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 

誰もがこの情報を利用できないことを確認する方法を知っていますか?

UPDATE:ユーザー/ 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 

UPDATE:私はエラーページを追加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> 
+0

ケビンだ

config.fog_public = false 

を削除し、私は問題を推測していることはあなたのビューまたはコントローラです。別の変換バージョンが必要な場合を除きます。あなたはコードを投稿できますか? –

+0

こんにちはエド、私はビューのいずれかからコードを追加し、これが起こっているコントローラアクション。ありがとう。 – kcurtin

+0

コンソールでphoto.image.url.to_sを評価するとどうなりますか?本当のイメージを指していますか? –

答えて

4

あなたが見ているのは署名付きURLです。完全なURL(キー、署名、有効期限を含む)がなければ、アクセスが拒否されます。それはまさにそれと同じように動作しています。そして私はその鍵が公開鍵であると推測しています。秘密鍵(AWSにはありません)がなければ無用です。

+0

ああそうです。アクセスキーがアップローダーの「aws_access_key」として設定したものであることは間違いありません。ちょうどそれがURLに含まれることは奇妙に思えました。この情報は誰も私のバケツにアクセスできません。 – kcurtin

+0

Nope。また、署名は、期限切れと公開鍵の両方でハッシュされます。公開鍵は、秘密鍵なしでは生成できません(またはAWSが行うようにチェックされます)。それはかなりきれいです。 –

-1

photo.image_urlの代わりにphoto.image.url。それが私が使っているものです。

+0

photo.image.urlとphoto.image_urlは同じURLです(https://s3.amazonaws.com/bucketname/uploads/photo/image/2/IMG_4842.jpg?AWSAccessKeyId=XXX&Signature=XXX%3D&Expires=1332093418)。私がアクセスキーの情報を削除しようとすると、https://s3.amazonaws.com/bucketname/uploads/photo/image/2/IMG_4842.jpgを使用すると、元の投稿に上記のエラーメッセージが表示されます。 – kcurtin

+0

それはアマゾンs3の設定ですか? GETリクエストを発行したときにURLにアクセスキー情報が必要で、ユーザーからそれを隠さないようになっているようです。 – kcurtin

6

デフォルト以外の値:)

関連する問題