2010-09-10 15 views
28

Ich probiere aus, wie Devise mit einem meiner Projekte zur Benutzerauthentifizierung arbeitet. Es gibt eine Benutzeranforderung, dass ihr Administrator in der Lage sein sollte, von Zeit zu Zeit einen Stapel von Benutzernamen und Benutzerpasswort zu generieren, und der Administrator wird dann seinen Nutzernamen und das Passwort per E-Mail senden.Wie automatisch Passwörter in Rails Devise generieren?

Angenommen, der Administrator verfügt über direkte SQL-Kenntnisse in der MySQL-Datenbank. Wie können die generierten Benutzernamen/Kennwörter von Devise erkannt werden? Vielen Dank!

Antwort

73

Verwenden Sie die Devise.friendly_token Methode:

password_length = 6 
password = Devise.friendly_token.first(password_length) 
User.create!(:email => '[email protected]', :password => password, :password_confirmation => password) 

FYI: Devise.friendly_token ein Token 20 Zeichen zurückgibt. Im obigen Beispiel hacken wir die ersten password_length Zeichen des generierten Tokens mithilfe der von Rails bereitgestellten Methode String#first ab.

6

Eine Option wäre die Verwendung des Devise.generate_token. I.e.

password = User.generate_token('password') 
User.create!(:email => '[email protected]', :password => password, :password_confirmation => password) 

Diese Option ist in Devise schon länger nicht mehr verfügbar. Bitte beachten Sie die andere Antwort (friendly_token).

+4

Dies scheint nicht mehr in der neuesten Version zu funktionieren. Ich erhalte einen 'Protected Method'-Fehler für generate_token. –

+0

es funktioniert nicht in den neuesten Versionen –

+0

Sie sollten 'Devise.token_generator' im Moment verwenden. – typeoneerror

0

(quick Einschränkung: Ich bin ein Schienen NEWB)

ich die generate_token versucht, aber es tut nicht, was Sie denken (siehe die Dokumentation)

(Ich bin mit Schienen 3.0. 5, und entwickeln 1.1.7)

Was ich fand, ist, dass Devise all das Zeug für Sie im Hintergrund erzeugen, wenn Sie tun:

User.create!(:email => "[email protected]", :password => "password") 

Devise sollte die verschluesseltes_passwort schaffen, und sa Für dich. (Pop eine Konsole öffnen und versuchen Sie es da draußen)

+0

Das OP fragte, wie neue Passwörter automatisch für neue Benutzer generiert werden können. Was Sie hier tun, ist das Passwort jedes neuen Benutzers auf "Passwort" zu setzen. Sicher, es ist in der Datenbank verschlüsselt, aber Sie werden sehr anfällig für Wörterbuch (Raten) -Angriffe sein. Wenn Sie stattdessen eindeutige Kennwörter mithilfe von Token generieren (z. B. generate_token), sind Sie äußerst sicher, da diese Token ziemlich lang und kompliziert sind (gemischte Zeichentypen, nicht auf Wörterbüchern basieren usw.). –

+0

Es sieht so aus, als ob er fragt, wie er generierte Benutzernamen und Passwörter eingeben und von Devise bearbeiten lassen kann. Er fragt speziell: "Wie können die generierten Benutzernamen/Passwörter von Devise erkannt werden?" Was ich meinte: Wir haben bereits eine generierte Liste von Benutzernamen und Passwörtern, aber ich weiß nicht, wie ich diese Informationen in die Datenbank einfügen kann, damit sie vom Entwickler erkannt werden. Was ich oben zeige, ist einfach, dass all die Hintergrundverschlüsselung und dergleichen von Devise gehandhabt wird, ohne dass man die Backend-DB durchgehen muss. –

+0

Und ich war __definitely__ ** NOT ** und schlug vor, dass sie "Passwort" für jeden neuen Benutzer verwenden. Hoffe, das ist nicht die Art, wie es dazu kam. Das ist in der Tat ein unglaublich schlechter Weg, neue Benutzer hinzuzufügen. Ich dachte ursprünglich, dass das 'generate_token' das verschlüsselte_passwort erzeugen sollte, da das OP darauf hinwies, direkten Zugriff auf die DB zu haben (ActiveRecord alle gemeinsam umgehen). –

Verwandte Themen