2012-07-18 10 views
5

Dies ist der Fehler, den ich sehe, wenn ich versuche, über Facebook einloggen, sehe ich immer diesen Fehler. Kann es nicht loswerden:Rails 3.2 + Facebook Auth + CSRF FAILURE

Konnte dich nicht von Facebook autorisieren, weil "Csrf erkannt".

habe ich ein Überspringen:

skip_before_filter :verify_authenticity_token 

auf dem Omniauth Rückruf, aber ich habe immer noch den Fehler. Dies ist in lokalen und prod (heroku) Umgebungen. Ich habe die Heroku-Umgebungsvariablen festgelegt. Irgendeine Idee?

Antwort

6

fand ich feststellen, dass das Problem war das Juwel zu neu war und einen Zustand Header Facebook vorbei, die fb nicht wollen. Ich rollte die omniauth facebook gem Version zurück und es funktionierte

+0

In welche Version hast du zurückgekehrt? –

+4

Ich hatte das selbe Problem, downgrade von omniauth-facebook auf 1.4.0 löste das Problem. –

+0

https://github.com/mkdynamic/omniauth-facebook/issues/75 und https://github.com/intridea/omniauth-oauth2/issues/20 für einige weitere Details – Nevir

0

senden Sie eine P3P-Header vielleicht hinzufügen ...

before_filter :set_p3p 
private 

def set_p3p 
    headers['P3P'] = 'CP="ALL DSP COR CURa ADMa DEVa OUR IND COM NAV"' 
end 

Ihrer Anwendung Controller

7

ich das gleiche Problem hatte man am selben Tag haben !! Ich dachte, es war ein Juwel Update oder so etwas, aber überhaupt nicht. Mit einem tiefen Debugging fand ich, dass omniauth "Callback-Phase initiiert." wurde zweimal angerufen.

Es war wegen einer dummen Doppel Initialisierung von

Anbieter: facebook, .....

One in config/initializers/devise.rb und in einem anderen initializer.

Ich hoffe, es wird Ihnen einen Hinweis Ihre Fehler

+1

Ich fand, dass das Problem war, das Juwel war zu neu und übergab einen STATE-Header an Facebook, die FB wollte nicht. Ich habe die omniauth-facebook Gem-Version zurückgerollt und es hat funktioniert. – tesserakt

+0

+1, Super !! Du hast meinen Tag gerettet!! Danke :) – Surya

+0

Ich hatte dieses Problem mit einem anderen omniauth Anbieter und konnte es nicht herausfinden, bis dies zu sehen. Vielen Dank! – Arrel