19521


`public/images/private_photo/**.jpg`これらの画像をログインしているユーザーのみにアクセスを許可するにはどうしたら良いのでしょうか。

表示の切り替えだけであればview側で可能ですが、直接リンクへアクセスすると表示ができてしまいます。


CC BY-SA 3.0
2015-11-26T09:36:28.687
19326
2015-12-01T13:09:38.270
9149
question
ruby-on-rails
railsで画像の表示に制限をつける方法


おそらく安直でお手軽なのが  
PrivateContentController#image みたいなのを作って、  
その中で認証処理を終えてから  
send_dataでcontent-typeなど設定してバイナリを返す方法です。

このやり方は、DBにコンテンツを格納した場合も同様です。  
（データの置かれている場所がデータベースなのかファイルなのかの違いでしかありません）

send_dataについては、こちらを確認してください。  
<http://railsdoc.com/references/send_data>

ご承知とは思いますが。  
ディレクトリトラバーサルなどが起きないよう設計には気をつけてください。


CC BY-SA 3.0
2015-11-26T10:37:06.707
19329
2015-11-26T10:37:06.707
8335
19326
answer


ログインユーザー向けのコンテンツ表示についてはサービス的には比較的実施検討が多い技術かと思います。

上記でも回答ありましたバイナリを返す方法がアプリ内でクローズする事が出来、最も実装はしやすいのですが、サーバの負荷が上がってきたときなどに大規模サービスの時には運用面で厳しいこともあります。

規模が大きいサービスのようであればインフラ含めた検討として、「nginxのsecure_link」や「cloudfrontの署名付きURL」など検討してみては如何でしょうか？

サービスの規模に応じて検討くださいませ。


CC BY-SA 3.0
2015-12-01T12:23:42.653
19521
2015-12-01T13:09:38.270
2015-12-01T13:09:38.270
8919
8919
19326
answer