Wie zu trennen Kennwort ändern von form entwickeln
Ich versuche, zwei Dinge zu tun:
1) Ändern Sie die Voreinstellung "Benutzer Bearbeiten-form" - mit entwickeln - zu entfernen, "Passwort" und lassen Sie die anderen Felder aktualisiert werden, ohne ein Kennwort eingeben, das heißt, entfernen Sie die Standard-überprüfung für das Passwort.
2) Erstellen Sie ein separates Formular für Passwort ändern
Habe ich alles zu funktionieren, es gibt nur ein problem, in dem separaten Formular für die Aktualisierung Passwort, ich habe auch ein Feld für das aktuelle Passwort ein. Wenn Sie über das Formular, keine Validierung erfolgt für aktuelle Passwort, also habe ich
@user.update_attributes(params[:user])
zu
@user.update_with_password(params[:user])
Dieser gearbeitet, aber es hob ein weiteres Problem. Zurück in der main-form mit all den anderen details, außer Passwort, der nun fordert, "Aktuelles Passwort". Wie kann ich dies erreichen, ohne eine Validierung für das aktuelle Kennwort genannt wird, auf dem Hauptformular?
hier ist meine Registrierungen controller:
def update
@user = User.find(current_user.id)
if @user.update_attributes(params[:user])
set_flash_message :notice, :updated
# Sign in the user bypassing validation in case his password changed
sign_in @user, :bypass => true
redirect_to after_update_path_for(@user)
else
clean_up_passwords(resource)
respond_with_navigational(resource) do
if params[:change_password] # or flash[:change_password]
render :change_password
else
render :edit
end
end
end
end
Dank!
Lösung 1
Habe ich eine Lösung gefunden, um das problem (wenn auch sehr chaotisch-man):
def update
@user = User.find(current_user.id)
if params[:user][:password].blank?
if @user.update_attributes(params[:user])
set_flash_message :notice, :updated
# Sign in the user bypassing validation in case his password changed
sign_in @user, :bypass => true
redirect_to after_update_path_for(@user)
else
respond_with_navigational(resource) do
render :edit
end
end
else
if @user.update_with_password(params[:user])
set_flash_message :notice, :updated
# Sign in the user bypassing validation in case his password changed
sign_in @user, :bypass => true
redirect_to after_update_path_for(@user)
else
clean_up_passwords(resource)
respond_with_navigational(resource) do
render :change_password
end
end
end
Lösung 2
Können Sie vorschlagen, eine bessere Lösung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie sich die Mühe machen, heraus zu überprüfen Erarbeiten wiki? Es gibt Beispiele für beide dieser Fälle
Sollten Sie einen Blick auf
@user.update_with_password(params[:user])
vs@user.update_attributes(params[:user])
update_result = ( params[:user][:password].blank? ? @user.update_attributes(params[:user]) : @user.update_with_password(params[:user]) )
und dann überprüfen Sie einfach für falsch (das ist der Teil, der unterscheidet sich für beide updates), aber das ist hässlich wie die Hölle.if params[:change_password]
? Benutzer können immer noch update, die beiden anderen Optionen und Passwort? Wenn nicht, können Sie es entfernen.Akzeptiert die Antwort nicht vollständig auf die Frage. Die, glaube ich, ist ein separates Anmeldeformular für die Nutzer-Profil-Eigenschaften (wie E-Mail, Vorname, etc) und das Passwort. Hier ist, was Sie tun müssen, für, die:
Erste, nutzen das Gerät::RegistrationsController für Ihr Profil aktualisiert.
password
undpassword_confirmation
Felder. Entwickeln, ignoriert diese, wenn Sie sind nicht in der lege.Zweite, erstellen Sie Ihre eigenen controller für die Verwaltung der Passwort-updates und eigene Helfer zu benötigen
current_password
,password
, undpassword_confirmation
auf update.Hier ist der Helfer,
update_password_with_password
dass benötigen Sie einen neuen Kennwort-Felder.