Program Tip

Rails에서 before_filter 건너 뛰기

programtip 2020. 11. 30. 19:49
반응형

Rails에서 before_filter 건너 뛰기


명확성을 위해 이름과 개체가 단순화되었습니다. 기본 개념은 동일하게 유지됩니다.

나는 3 컨트롤러가 : dog, cat,와 horse. 이러한 컨트롤러는 모두 컨트롤러에서 상속됩니다 animal. 컨트롤러 animal에는 사용자를 다음과 같이 인증하는 이전 필터가 있습니다.

before_filter :authenticate

def authenticate
  authenticate_or_request_with_http_basic do |name, password|
    name == "foo" && password == "bar"
  end
end

show작업 dog에서 모든 사용자에게 공개 액세스 권한이 있어야합니다 (인증 건너 뛰기).

에 대한 인증을 별도로 작성하려면 dog다음과 같이 할 수 있습니다.

before_filter :authenticate, :except => :show

그러나 dog에서 상속되었으므로 animal컨트롤러 별 작업에 액세스 할 수 없습니다. 추가 :except => :show에서 animal컨트롤러하면에 대한 인증 건너 뜁니다뿐만 아니라 show의 행동을 dog뿐만 아니라, 그 cathorse. 이 동작은 바람직하지 않습니다.

에서 상속하는 동안 show작업에 대해서만 인증을 건너 뛸 수있는 방법은 무엇입니까?doganimal


class Dog < Animal
  skip_before_filter :authenticate, :only => :show
end

필터 및 상속에 대한 자세한 내용은 ActionController :: Filters :: ClassMethods참조하십시오 .


주어진 두 대답은 절반 맞습니다. 모든 개 동작이 열리지 않도록하려면 다음과 같이 'show'동작에만 적용하도록 skip_before_filter를 한정해야합니다.

class Dog < Animal
  skip_before_filter :authenticate, :only => :show
end

이를 위해 skip_before_filter를 사용할 수 있습니다.

Rails API에 설명되어 있습니다.

귀하의 예에서는 다음 dog을 포함해야합니다.

skip_before_filter :authenticate

rails 4를 사용하는 작은 업데이트는 지금 skip_before_action :authenticate, :only => :show이며 before_filters가 before_action대신 사용해야 합니다.

참고 URL : https://stackoverflow.com/questions/2390178/skip-before-filter-in-rails

반응형