2013-05-02 3 views
5

devise :token_authenticable을 사용하여 사용자 정의 인증 전략을 구현하는 방법을 궁금합니다.Devise에 대한 사용자 정의 인증 전략 : token_authenticable

devise :database_authenticatable (here) 모델을 사용하여 모델을 수행하는 방법에 대한 지침을 이미 발견했습니다.

인증을 시도하는 모델의 이름은 Pupil입니다. 그래서 여기 (config/initializers/custom_auth.rb에 위치) 내 현재의 전략 :

Warden::Strategies.add(:auth_pupil_strategy) do 
    # missing valid? method indicates this strategy is always applied 

    def authenticate! 
    fail!("YOU SHALL NOT PASS!") 
    end 
end 

그리고 내 config/initializers/devise.rb (또한 :scope => :pupil없이 그것을 시도) : 그래서이 사용자가 할 수 beeing는하지로 연결되어야

config.warden do |manager| 
    manager.default_strategies(:scope => :pupil).unshift :auth_pupil_strategy 
end 

로그인하려면이 방법을 devise :database_authenticatable에서 devise :token_authenticable으로 전환 할 때 적용되지 않습니다.

어쩌면 난 오른쪽에 누락되었습니다 :scope 여기.

이제 이상한 점이 있습니다 : 사용자가 유효하지 않은 토큰을 입력 할 때마다 내 전략이 호출되고 "당신은 통과하지 말아야합니다!" 반환됩니다. 그러나 올바른 토큰이 제공되면 사용자는 정상적으로 로그인 할 수 있습니다.

+0

수치를하는 데 도움이 abl 이걸로 당신을 도울 수 있습니다. 솔루션을 찾을 수 있었습니까? – seanhussey

+0

어쩌면 http://kyan.com/blog/2013/10/11/devise-authentication-strategies가 도움이 될까요? –

+0

'유효합니까?' 당신의 전략을위한 방법. 그게 문제를 해결할 지 모르겠지만 어떤 전략 (예 : John Beynon의 링크 참조)의 필수 조건 일 것입니다. – conciliator

답변

0

유효 기간을 무시해야하기 때문에 전략이 호출되지 않았습니다. 방법은 this 대답 제안;

뿐만 아니라 기본 전략 방법을 사용한다, 그것은 사용하기위한되었다 그러나 방법은 다른, 당신은 방법이 예상되는 참조 전략의 배열을받을 수로 declaration

def default_strategies(*strategies) 
    opts = Hash === strategies.last ? strategies.pop : {} 
    hash = self[:default_strategies] 
    scope = opts[:scope] || :_all 

    hash[scope] = strategies.flatten unless strategies.empty? 
    hash[scope] || hash[:_all] || [] 
end 

를 보자입니다 여러 사용자 정의 전략

작업을 할 때, 아니 그냥 범위가 취소]를 사용하여 힙의 상단에 전략을두고 영리 해킹이지만, 어떤 이유로 예기치 않은 동작이

희망은 아무도 없다는 것을