Ich verwende OmniAuth mit Rails 3.1.4 und ich versuche, bereits authentifizierten Benutzern zu erlauben, mehrere OpenID-Anbieter mit ihrem Konto zu verknüpfen.
Als nicht authentifizierter Benutzer funktioniert die Anmeldung mit OpenID einwandfrei. Als authentifizierter Benutzer, wenn ich versuche, mich mit einem anderen oid-Provider anzumelden, sieht es bei der Ausführung der Callback-Methode so aus, als wäre ich noch nicht authentifiziert worden.
Für mich sieht es so aus, als ob der Controller ausgeführt wird, bevor Sitzungen initialisiert werden (oder Sitzungen werden komplett übersprungen).
Was könnte es sein?
Bestätigung der Lösung von Andrei Serdeliuc, Deaktivieren von protect_from_forgery funktionierte für mich (Ruby 1.8.7, Rails 2.3.11, OmniAuth 0.1.6)
in Ihrem CallbackController (AuthenticationsController im berühmten Screencast)
Hinzufügen von skip_before_filter :verify_authenticity_token
oder protect_from_forgery :except => :create
an der Spitze des Controllers arbeiten!
Da es eine Möglichkeit für CSRF (Cross-Site Request Forgery) sein könnte, sollten Sie die Identität des Openid-Servers verifizieren, vergessen Sie nicht, die Zertifikatsprüfung einzurichten (im Initialisierer):
%Vor%verhindert Warnungen wie:
%Vor%Jetzt werden meine Sitzungen nicht mehr zurückgesetzt und können meinem curren_user mehrere OpenID-Authentifizierungen hinzufügen.
Prost
Denken Sie daran, dass OmniAuth kein Konzept des "Anmeldens" hat. Es überprüft einfach, dass der Benutzer in der Drittanbieter-App authentifiziert wurde und gibt Ihnen die Informationen, die Sie benötigen, um Ihr eigenes Anmeldesystem zu implementieren (oder mit einem vorhanden ). (Es gibt ausgezeichnete Screencasts zu diesem Thema; siehe Teil 1 und Teil 2 zum Beispiel für Railscasts.)
Im Folgenden wird davon ausgegangen, dass Sie nicht in diese allgemeine Falle geraten sind und wirklich Probleme beim Zugriff auf Sitzungsdaten in Ihrem Rückruf haben. Einige grundlegende Tests in meinem Teil zeigen, dass Sitzungen wie erwartet im OmniAuth-Callback funktionieren. Siehe den folgenden Code unter Ссылка :
%Vor%Nach der Authentifizierung über verschiedene Dienste habe ich Anwendungen für (Facebook und Twitter unter ihnen), ich erhalte eine Ausgabe ähnlich der folgenden (siehe die Ansichtsdatei ):
%Vor% Was mich angeht, muss ich eine App mit Intuit implementieren und bin auf das gleiche Problem gestoßen. Was es für mich behoben hat, ist nicht das Entfernen der Schutzfälschung oder das Überspringen der authenticity_token
Prüfung, sondern das Sicherstellen, dass die Seite, auf der ich das Autorisierungsformular lokal eintrage, denselben Host wie die Weiterleitungs-URL hat. Ich hatte 127.0.0.1:3000
, aber die redirect_url war localhost:3000
.
Tags und Links ruby-on-rails-3 omniauth