2011-08-11 3 views
18

누구나 가입하고 로그인 할 수 있기 때문에 로그인 할 때까지 사용자가 역할을 식별 할 수 없으므로 Devise의 authorization_check를 건너 뛰는 것이 합리적이지 않습니까?cancan skip_authorization_check for Devise 인증

전제로 가면 Devits 등록 컨트롤러에서이 registrations_controller를 상속 받아 컨트롤러 디렉토리에 배치합니다. 경로 파일에

class Users::RegistrationsController < Devise::RegistrationsController 
    skip_authorization_check 
end 

변화 :

devise_for :users, :controllers => { :registrations => "registrations" } 

는 그래도 뭔가를 누락 : 당신의 도움에 대한

This action failed the check_authorization because it does not authorize_resource. Add skip_authorization_check to bypass this check. 

감사합니다.

+0

@RyanBigg에서 캉캉 문서에 분명히있다, 나는 당신의 대답 있는지 확인하기 위해거야 이전 질문에 대한 올바른 애플 리케이션입니다. 감사. – Jay

+0

@Hosemeyer, 다른 문제에서 조언을 따를 수 있기 전에이 문제를 지나쳐야합니다. 당신의 도움을 주셔서 감사합니다. – Jay

답변

38

당신이 잊고 앱에 보안 구멍을 열 어떤 시점에서 수동으로 모든 컨트롤러에 check_authorization을 넣어야 할 경우 쉬운 솔루션

check_authorization :unless => :devise_controller? 

. cancan으로 인증을 필요로하지 않는 컨트롤러를 명시 적으로 화이트리스트에 추가하는 것이 좋습니다. 나는이 문제를 과거를 얻을 때

https://github.com/ryanb/cancan/wiki/Ensure-Authorization

편집

class ApplicationController < ActionController::Base 
    check_authorization :unless => :do_not_check_authorization? 
    private 
    def do_not_check_authorization? 
    respond_to?(:devise_controller?) or 
    condition_one? or 
    condition_two? 
    end 

    def condition_one? 
    ... 
    end 

    def condition_two? 
    ... 
    end 
end 
+0

감사합니다 bradgonesurfing +1. 이 코드를 수정하고 테스트하기 위해 돌아 왔을 때, 모든 것이 작동하면 대답을 바꿀 것입니다. – Jay

+0

대답은 여전히 ​​(-1) – bradgonesurfing

+0

에서 점수를 얻은 Bigg입니다. 문제는 내가 작성한 컨트롤러 외에, 건너 뛰고 싶은 다른 두 개의 컨트롤러가 있다는 것입니다. 나는 이들을 추가하기 위해 '제외'조건을 수정할 수 없었습니다. 나는 그 안에 'skip_authorization_check'을 넣을 수 있지만, 모든 예외를 처리하는 응용 프로그램의 위치가 하나 뿐인 경우 더 좋을 것입니다. – Jay

관련 문제