2012-08-17 21 views
6

Quiero crear una estrategia de autenticación personalizada para acceder a la API. Seguí el código de ejemplo en Devise ignoring custom strategy.Diseñar ignorar mi estrategia personalizada

El problema es que el válido? método en mi estrategia Api nunca se ejecuta (basado en tratar de hacer palanca en él).

Mi código:

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 

y en el inicializador legado:

config.warden do |manager| 
    manager.default_strategies.unshift :api 
end 

Lo que alguna vez lo hago, parece que Idear utilice siempre su estrategia predeterminada. Que yo sepa, esto debería ser suficiente ...

------- -------- EDITAR

requiero la estrategia como esta en la parte superior de mi inicializador legado:

require Rails.root.join('app/devise/strategies/api') 

Sé que la estrategia se carga en el momento del arranque, ya que si pongo una llamada de palanca dentro de la clase, se iniciará una sesión de palanca. Pero las llamadas Pry dentro de los métodos nunca se ejecutan. : -S

Respuesta

4

¡Encontró la respuesta!

tuve que usar esto:

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

a hacer que funcione. Lo extraño es que una gran parte del código de muestra que vi en la red no lo usó: -S

0

¿Cuándo necesita su estrategia personalizada? Comparando con el ejemplo, está agregando la estrategia allí en lugar de en su inicializador. Puede intentar solicitar la estrategia personalizada en la parte superior del inicializador para asegurarse de que esté cargada antes de agregarla a default_strategies.

Si eso no soluciona el problema, no dude en agregar algunas declaraciones de puts temporales directamente en el mismo lugar donde se llama a authenticate para verificar default_strategies. Es decir, si todavía no está cómodo usando el depurador, que es lo que haría.

+0

Tengo esta línea en la parte superior del inicializador del dispositivo: requiere Rails.root.join ('app/idear/estrategias/api ') y si agrego una llamada de palanca dentro de la estrategia, se carga cuando se inicia la aplicación de rieles. PERO todas las llamadas de palanca que tengo dentro de la válida? método nunca se llama. – Alain

Cuestiones relacionadas