Ich entwickle eine App mit Rails und Devise für die Benutzerauthentifizierung. Ich frage mich, ob es eine Möglichkeit gibt, das Passwort nur für einige Änderungen zu fragen.Devise: Passwort nur für bestimmte Situationen fragen
Zum Beispiel möchte ich das Passwort gefragt werden, wenn:
- das Konto löschen
- Passwort ändern
Und ich möchte der Benutzer frei sein, andere Felder zu bearbeiten, ohne jedes Passwort, wie zum Beispiel:
- Namen
- Benutzername
- Avatar
Also, würde ich einen Weg, wie zwischen diesen beiden Methoden zu tauschen. Wie kann ich das lösen?
EDIT:
In Devise in der Dokumentation ich diese gefunden und es funktioniert gut, es erlaubt das Ändern nur Passwort und E-Mail, wenn ich das Passwort eingeben:
def update
@user = User.find(current_user.id)
successfully_updated = if needs_password?(@user, params)
@user.update_with_password(params[:user])
else
# remove the virtual current_password attribute update_without_password
# doesn't know how to ignore it
params[:user].delete(:current_password)
@user.update_without_password(params[:user])
end
if successfully_updated
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
render "edit"
end
end
private
# check if we need password to update user data
# ie if password or email was changed
# extend this as needed
def needs_password?(user, params)
user.email != params[:user][:email] ||
!params[:user][:password].blank?
#HERE
end
Nun, was ich in #HERE
setzen könnte benötigen Sie auch das Passwort, wenn ich das Konto lösche?
Sie können nichts '#HIER' hinzufügen, da die' update' Methode den Benutzer nicht löscht, sondern nur Benutzerattribute aktualisiert. Sie können die gleiche Art von Sachen hinzufügen, um 'Methode 'in Ihrem Controller – ted