2012-05-15 9 views
6

Estoy intentando crear una API para mi aplicación de rieles.skip_before_filter cuando api_key está presente

Quiero omitir el csrf antes del filtro cuando una api_key válida está presente en las solicitudes que no se obtienen.

He tratado (voy a validar la api_key vez que puedo conseguir el filtro condicional de trabajo)

(skip_before_filter :verify_authenticity_token) if params[:api_key].present? 

Pero eso no funciona ...

¿Alguna idea?

+0

¿Por qué los controladores API heredan de ApplicationController? – apneadiving

+0

Estaba tratando de evitar tener que crear dos juegos de controladores para hacer efectivamente lo mismo. – Cyrus

Respuesta

6

no creo que se puede trabajar, ya que si se evalúa la expresión durante la creación de la clase del controlador, por lo que es falso params[:api_key].present? en ese momento ... u puede tratar

skip_before_filter :verify_authenticity_token, :if =>lambda{ params[:api_key].present?}

+0

Voy a intentarlo. – Cyrus

+0

Esto parece muy prometedor, pero no funciona. 'skip_before_filter: verify_authenticity_token' funciona sin el condicional que es raro. – Cyrus

+0

he comprobado skip_before_filter: verify_authenticity_token,: if => lambda {params [: api_key] .present?} Y parece funcionar si se inserta después de protect_from_forgery –

-2

probar este

skip_before_filter :verify_authenticity_token, :except => [], if params[:api_key].present? 
+0

Intenté esto y no funcionó :( – Cyrus

-1

No hay forma de hacer skip_before_filter condicional. No puede usar 'si' en un skip_before_filter.

0

rieles 3.2.13 -

Ninguna de las soluciones anteriores dio (tal vez yo estaba haciendo algo mal?), Pero esto hizo:

skip_before_filter :verify_authenticity_token, :if => :check_auth 
def check_auth 
    request.headers["authentication_token"] == ENV['AUTH_KEY'] 
end 
Cuestiones relacionadas