Ich versuche, eine separate Ansicht für das Ändern von Benutzerkennwort zu erstellen, ich nicht wie das zu tun.Wenn ich beginne, merke ich, dass es andere Methoden und möglicherweise einige Validierungen im Modell. Ich brauche Hilfe, wie kann ich das tun. Ich habe keine Ahnung. Was ich in Controller, Modell und Ansicht aufnehmen muss. Ich implementiere auch "Altes Passwort eingeben, um neues Passwort zu erstellen".Ruby on Rails Authentifizierung
Antwort
Ich würde Ihnen empfehlen, die RESTful Prinzipien zu folgen.
Erstellen Sie eine PasswordsController
in Ihrem Projekt mit den Aktionen edit
und update
.
Dann erstellen Sie die edit.html.erb
Ansicht mit dem Formular für die Passwortänderung.
Die Validierungen in Ihrem Modell hängen von Ihren Anforderungen ab. Hier
ist ein Beispiel dafür oben:
Controller:
class PasswordsController < ApplicationController
before_action :set_user
before_action :check_current_password, only: :update
def edit
end
def update
if @user.update password_params
flash[:success] = 'Password changed'
redirect_to user_path # Your user's profile for example
else
flash[:danger] = 'Error'
render :edit
end
end
private
def password_params
params.require(:user).permit(:password, :password_confirmation)
end
def set_user
@user = current_user # Your current user
end
def check_current_password
unless @user.authenticate(params[:current_password])
raise # I would recommend you to work with exceptions here because you interrupt the process.
# You can make it also a bit more specific if you define an exception class and just catch them.
end
rescue
flash[:danger] = 'Current password incorrect!'
redirect_to password_path(current_user) # Redirect back to the change page
end
end
Ausblick:
<!-- HTML skeleton is in application.html.erb -->
<%= form_for @user, url: password_path, method: :patch do |f| %>
<%= text_field_tag :current_password %>
<%= f.text_field :password %>
<%= f.text_field :password_confirmation %>
<%= f.submit 'Change password' %>
<% end %>
Vorausgesetzt, dass Sie installiert haben bcrypt
Edelstein- und Ihr Benutzermodell hat eine Feld namens password_digest
, sollte Ihr Modell dies mögen .
Modell:
class User < ApplicationRecord
has_secure_password
end
Dies ist eine sehr einfache Implementierung einer Kennwortänderung. Ich habe es nicht getestet, aber es ist nur hier, um Ihnen eine Idee zu geben, wie es funktioniert.
Weitere Informationen finden Sie unter https://gist.github.com/thebucknerlife/10090014#steps
Vielen Dank. Das Problem ist jedoch, dass der Benutzer das aktuelle Passwort eingeben muss, um ein neues Passwort zu erstellen. –
Fügen Sie dann ein weiteres Feld hinzu, das das aktuelle Passwort benötigt, und prüfen Sie es in Ihrem Controller, bevor Sie es aktualisieren. Ich werde meine Antwort aktualisieren. – Tobias
- 1. Windows-Authentifizierung mit Ruby on Rails
- 2. OpenID-Authentifizierung in Ruby on Rails
- 3. Curl on Ruby on Rails
- 4. Ruby on Rails Entschlüsselung
- 5. ruby-on-rails: gravatar_for
- 6. Ruby On Rails Application.html.haml
- 7. Ruby on Rails Fehler
- 8. Ruby on Rails fehlgeschlagen
- 9. Ruby on Rails einrichten
- 10. Ruby on rails Verbindungsproblem
- 11. Ruby on rails Pfadhelfer
- 12. Ruby on Rails regex
- 13. Ruby on Rails Seitensteuerung
- 14. Ruby on Rails, atom
- 15. Ruby On Rails Migration
- 16. Ruby on Rails Beziehungen
- 17. Feldprüfung Ruby on Rails
- 18. Ruby on Rails-Vorlage
- 19. Ruby On Rails Grundvariable
- 20. Ruby-on-Rails Authentifizierungsanleitung
- 21. Ruby on Rails bietet
- 22. Ruby on rails Queing
- 23. LocalJumpError (Ruby on Rails)
- 24. Ruby on Rails Libelle
- 25. Ruby on Rails Cache
- 26. Ruby on Rails Formularfehler
- 27. Ruby On Rails Dateiselektor
- 28. Ruby on Rails - Facebook Authentifizierung mit REST-Backend
- 29. Ruby on Rails - FCKEditor Absoluter Bildpfad Ruby
- 30. Ruby on Rails Single Sign On mit mir mehrere Unternehmensumgebungen
Verwenden Sie Devise? Oder hast du dein eigenes Authentifizierungssystem gerollt? –
hatte ich durch eigenes Authentifizierungssystem implementiert. –