2012-08-17 9 views
6

API'ye erişmek için özel bir yetkilendirme stratejisi oluşturmak istiyorum. Örnek kodu Devise ignoring custom strategy numaralı telefondan takip ettim.Devise özel stratejimi görmezden gel

Sorun şu ki geçerli mi? Api stratejimdeki yöntem asla çalışmaz (buna göz atmaya dayanarak).

Kodum:

module Devise 
    module Strategies 
    class Api < Devise::Strategies::Base 
     def valid? 
     binding.pry 
     params[:request_source] == 'api' 
     end 

     def authenticate! 
     #do stuff here 

     if user 
      success!(user) 
     else 
      warden.custom_failure! 
      render :json=> {:success=>false, :message=>"Error with your login or password"}, :status=>401 
     end 
     end 
    end 

    Warden::Strategies.add(:api, Devise::Strategies::Api) 

    end 
end 

ve vasiyetle in başlatıcısı:

yapmam şimdiye Ne
config.warden do |manager| 
    manager.default_strategies.unshift :api 
end 

, Devise her zaman varsayılan stratejiyi kullanır gibi görünüyor. AFAIK, bu

... yeterli olacaktır ------- DÜZENLEME -------- benim vasiyetle başlatıcısı en üst kısmında böyle bir strateji gerektirir

:

Sınıfın içinde bir gözetleme çağrısı koyduğumda, bir önyükleme oturumu başlatacağından, stratejinin açılışta yükleneceğini biliyorum. Ama Pry çağırır yöntemlerin içinde asla koşmaz. : -S

cevap

4

Cevabı bul!

config.warden do |manager| 
    manager.default_strategies(scope: :user).unshift :api 
end 

çalışması için:

Bunu kullanmak zorunda kaldı. Tuhaf olan şey, net üzerinde gördüğüm örnek kodun birçoğu kullanmadı: -S

0

Özel stratejinizi ne zaman istersiniz? Örneğe kıyasla, başlatıcınızda kullanmak yerine stratejiyi oraya ekliyorsunuz. Varsayılan stratejiyi eklemeden önce yüklendiğinden emin olmak için başlatıcınızın üst kısmında özel stratejiyi kullanmayı deneyebilirsiniz. Bu hile yapmazsa, default_strategies öğelerini denetlemek için kimlik doğrulamasının yapıldığı kendi kendini düzenleyen bazı geçici ifadeler eklemekten çekinmeyin. Üste | Yani, hata ayıklayıcısını kullanarak zaten rahat değilsen, bunu yapardım.

+0

Bu satırın başlangıç ​​düzenleyicisinin üst kısmında var: Rails.root.join gerektirir ('app/devise/stratejiler/api ') ve stratejinin içinde bir gözetleme çağrısı eklerseniz, raylar uygulaması başladığında yüklenir. ANCAK geçerli olan tüm gözetleme çağrıları? yöntem asla çağrılmaz. – Alain