2013-05-02 12 views
5

Zastanawiam się, jak zaimplementować niestandardową strategię uwierzytelniania przy użyciu narzędzia Deinstalacja przy użyciu devise :token_authenticable.Niestandardowa strategia uwierzytelniania dla twórców Korzystając z: token_authenticable

Już znalazłem instrukcje, jak to zrobić z modelem przy użyciu devise :database_authenticatable, który jest objęty here.

Model próbujący uwierzytelnić ma nazwę Pupil. Więc tutaj jest moja obecna strategia (znajduje się w 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 

i moim config/initializers/devise.rb (również próbował go bez :scope => :pupil):

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

Więc powinno to prowadzić do użytkownik nie bardzo dobrym stanie zalogować się, ale jakoś ta strategia nie jest stosowana przy zmianie z devise :database_authenticatable na devise :token_authenticable.

Może po prostu brakuje mi tutaj prawa :scope.

Oto dziwna rzecz: za każdym razem, gdy użytkownik wprowadza nieprawidłowy token, moja strategia jest wywoływana i "NIE PASZ!". jest zwracany. Jednak po dostarczeniu prawidłowego tokena użytkownik może się zalogować.

+0

wstyd, że nikt nie był abl e, aby ci w tym pomóc. Czy byłeś w stanie znaleźć rozwiązanie? – seanhussey

+0

może http://kyan.com/blog/2013/10/11/devise-authentication-strategies pomoże? –

+0

Musisz zaimplementować "prawidłowy?" metoda dla twojej strategii. Nie wiem, czy to rozwiąże cokolwiek, ale z pewnością jest warunkiem wstępnym jakiejkolwiek strategii (patrz np. Link Johna Beynona). – conciliator

Odpowiedz

0

Twoja strategia nie została wywołana, ponieważ musisz zmienić ważność? metoda jako odpowiedź this;

Ale też trzeba zastosować metodę strategii domyślne, jednak sposób, w jaki został przeznaczony do użycia jest inny, niech zobaczyć 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 

jak widać metoda ma otrzymać tablicę strategii nie tylko zakres, używając unshift jest mądry hack, który stawia swoje strategie na szczycie hałdy, ale z jakiegoś powodu ma nieoczekiwane zachowanie, gdy pracuje z wieloma strategiami niestandardowych

nadzieja pomaga

Powiązane problemy