Rails 3.1's has_secure_password funktioniert gut mit OmniAuth

8

Ich portiere ein Projekt von Rails 3 nach 3.1. Mein Authentifizierungssystem wurde in ActiveRecord einfach auf das neue has_secure_password umgestellt. Das einzige Problem, auf das ich stoße, ist, dass ich auch OmniAuth benutze und das System eingerichtet ist. Wenn sich ein Benutzer mit einem der OmniAuth-Anbieter anmeldet, sollte das Konto kein Passwort erfordern. Ich kann nicht scheinen, das password_digest Validierungssetup durch has_secure_password außer Kraft zu setzen. Gibt es überhaupt eine Möglichkeit, diese Validierungen abzuschalten und meine eigenen zu schreiben, oder muss ich nur meine alten handgeschriebenen bcrypt-Funktionen aus meiner Rails 3-Version der Site verwenden?

    
Scott Martin 21.09.2011, 02:07
quelle

2 Antworten

5

Am Ende habe ich wieder benutzerdefinierte Methoden verwendet. Allerdings habe ich nachher bemerkt, dass ich in der Lage gewesen wäre, einen before_validation-Callback zu verwenden, um die Bedingungen zu überprüfen, und wenn sie übereinstimmen, setze password_digest auf etwas Einfaches wie '0'. Auf diese Weise würde der Digest niemals leer sein, aber gleichzeitig sollte er nicht als korrektes Passwort validiert werden und sich über OmniAuth anmelden.

Fühlen Sie sich frei, mich zu korrigieren, wenn ich mich irre.

    
Scott Martin 28.09.2011, 05:43
quelle
4

Scott, Ihre Idee ist richtig. Ich habe mit diesem Problem vergebens gerungen. Ich habe versucht, 'has_secure_password' zu überschreiben und es wird einfach nicht funktionieren. Egal wo ich den Code steckte.

Stattdessen habe ich Folgendes:

%Vor%

Die apply_omniauth-Methode wird vom Controller aufgerufen, wenn jemand versucht, sich zu authentifizieren oder sich anzumelden.

Danke für die Idee, Sie haben es geschafft.

    
crankin 30.09.2011 01:47
quelle

Tags und Links