2010-03-06 5 views
1

저는 레일스 앱을 만들고 잔잔한 인증 플러그인을 사용하고 있습니다. 앱에 사용자 이미지가 포함됩니다. 로그인 한 사용자 만 탐색 할 수 있지만 로그인 한 사용자 만 허용하도록 이미지에 대한 직접 URL 액세스를 제한 할 수 있는지 궁금합니다.레일 - 이미지에 대한 URL 액세스를 제한 하시겠습니까?

다른 말로하면, 이미지가 thesite.com/user1/foo.jpg에 있다는 것을 알더라도 로그인하지 않으면 그 이미지를 볼 수 없습니다. 이론적으로는 Apache 구성에서 할 수 있지만, 그 파일을 수동으로 편집해야 할 필요가 있습니다.

이것이 가능합니까? public 디렉토리에서 사진을 이동하는 것이 더 합리적입니까? (정적 컨텐츠에는 일반적으로 public이 사용되므로 성능에 영향이 있는지 확실하지 않습니다.)

+1

: 레일 내에서 요청 개체를 확인할 수 있습니다. 랙 레이어 (http://guides.rubyonrails.org/rails_on_rack.html)에서 이미지 필터링을 높이거나 심지어 더 높은 이미지 필터링을 시도 할 수도 있습니다. – clyfe

+0

@clyfe - 이것이 왜 성능 병목 현상이 될 수 있습니까? 레일스는 아파치가 처리하도록하는 대신 바이너리 데이터를 처리해야하기 때문에? –

+0

예, Apache는 Ruby/Rails보다 빠릅니다. – Eric

답변

3

이진 데이터를 사용자에게 공개하는 이미지에 대한 컨트롤러 작업을 만들 수 있습니다 .

map.connect ':user/:picture', :controller => 'accounts', :action => 'displayPic' 
: 사용자가 로그인 한 경우에만) 접근이에 서문, 나는 장고/파이썬이 아닌 사람 루비/레일하지만, 내가 말할 수있는 구성은 다음과 같을 것입니다에서 왔어요

과 실제 컨트롤러는 다음과 같습니다.

class AccountsController < ApplicationController 
    def image 
     # check if user is logged in, then 
     user = Account.find(params[:user]) 
     image = get_image(user, params[:picture]) 
     send_data(image, 
      :filename => "#{params[:picture]}", 
      :type => "image/jpeg") 
    end 

private 

    def get_image(image_name) 
     # do something to find image 
     # and return the binary data 
     # to the action 
    end 
end 
당신이 정말로 통해 이미지에 직접 액세스하지 뜻 이죠, 그러나

# images_controller.rb 
ImagesController < ApplicationController 

    before_filter :require_user, :only => 'show' 

    def require_user 
    unless current_user 
     redirect_to root_url # or :back, or wherever 
    end 
    end 

end 

:

그래서 더 루비/레일 기술을 가진 사람이

2

그냥 작업을위한 사용자 요구를 정리할 수있는이 커뮤니티 위키 제작 http://yoursite.com/userfoo/bar.jpg,하지만 http://yoursite.com/images/system/file/5837/bar.jpg을 통해? 당신은 이미지가 데이비드 Antaramian이 userbase가에 따라, 성능 병목이 될 수있는, 말했다 같은 컨트롤러를 던져 보내야 할 것

# images_controller.rb 
ImagesController < ApplicationController 

    before_filter :require_onsite, :only => 'show' 

    def require_onsite 
    # pseudoruby, might need some massage 
    unless request.referer.match(/request.domain/) 
     redirect_to root_url 
    end 
    end 

end 
+0

URL이 http://yoursite.com/images/system/file/5837/bar.jpg 인 경우 요청 개체를 확인하라는 메시지가 표시됩니다. 이 작업은 Ruby on Rails 3에서 가능합니까? 나는 참고 문헌을 찾을 수 없었다. 감사합니다 – DDDD

+0

여기를 참조하십시오 : http://stackoverflow.com/questions/2165665/how-do-i-get-the-current-url-in-ruby-on-rails – Eric

관련 문제