Ich frage mich, ob es eine Art gibt, die Prozedur "Passwort vergessen" aufzurufen, ohne dass mein Benutzer sich abmelden muss
Der Fall, in den ich hineingeraten bin, ist: 1. Ein Benutzer meldet sich mit Facebook an, für sie wird ein gefälschtes Passwort generiert 2. Der Benutzer möchte dann seine E-Mail / seinen Namen / sein Passwort ändern oder einfach den Facebook-Login verwenden
da devise ein Passwort benötigt, um diese Felder zu ändern, wie es sollte, kann der Benutzer sie nicht ändern
Ich hatte darüber nachgedacht, das Passwort nicht zu setzen, aber das macht keinen Sinn für die Sicherheit. Stattdessen zeige ich die Felder nur als Text an und benachrichtige den Benutzer, das Passwort zu vergessen, um ein Passwort zu setzen Passwort und dann können sie die Felder
ändernDas Problem ist dann, dass ich nicht einfach vom Benutzerprofil darauf verlinken kann, da devise dem Benutzer sagt, dass er dies nicht tun kann, während er bereits eingeloggt ist.
Gibt es also eine Art, das vergessene Passwort oder die Methode / users / password / edit zu überschreiben, damit ein eingeloggter Benutzer diese Aktion auch ausführen kann?
Meine Komplettlösung hier, da ich dann auch gelernt habe, dass der Benutzer sich nach dem Klicken auf den Link in der Email abmelden müsste, war das Hinzufügen einiger zusätzlicher UserController-Aktionen zum eigentlichen Editieren des Passworts sowie zum Speichern. Dies ist keine ideale Lösung und Kälte wird wahrscheinlich besser gemacht, aber es funktioniert für mich.
Benutzer Controller; Methoden zum Zurücksetzen hinzugefügt
%Vor%views / devise / registrations / edit; Die Ansicht wurde so geändert, dass der Benutzer Felder, die ein Kennwort erfordern, nicht bearbeiten darf.
%Vor%views / devise / mailer / reset_password_instructions; musste es ändern, um in unserem neuen Fall auf die richtige URL zu zeigen
%Vor%views / users / reset_password_edit.erb
%Vor%config / routes.rb
%Vor%Der Grund dafür, dass Sie das Passwort nicht zurücksetzen können, ist, dass das Gerät versucht, den Benutzer mit der aktuellen Sitzung zu authentifizieren, und wenn Sie erfolgreich sind, werden Sie automatisch zu dem Pfad weitergeleitet, zu dem es gehen soll. Was Sie benötigen, ist, die Edit- und Update-Aktion des Passwortreglers zu überschreiben, damit dieser Schritt übersprungen wird.
Hier ist der Code. Fügen Sie in Ihrem Passwort-Controller die folgenden Codes hinzu (Sie können das Gerät bitten, die Controller für Sie zu generieren, oder Sie können einfach den folgenden Controller erstellen). Die Überschreibung für die Aktualisierung ist erforderlich, da andernfalls ein angemeldeter Benutzer nach dem Zurücksetzen des Passworts automatisch abgemeldet wird. (Oder wenn Sie möchten, dass Sie so die #update override loswerden können)
%Vor%Die Routen sind wie folgt
%Vor% Sie können @user.send_reset_password_instructions
verwenden, um das Token zum Zurücksetzen des Kennworts zu generieren und die E-Mail zu senden. Wenn Sie den Mailer direkt aufrufen, wird kein Token zum Zurücksetzen des Kennworts generiert, um das Zurücksetzen zu authentifizieren.
Tags und Links ruby-on-rails-3 ruby-on-rails authentication devise forgot-password