2017-04-04 29 views
3

Ich habe ein Registrierungs-/Bearbeitungsformular, das über eine Devise::RegistrationsController innerhalb meiner Anwendung gerendert wird. So wie es jetzt funktioniert, müssen Sie Ihr aktuelles Passwort angeben, wenn Sie das Formular aktualisieren. Die Art, wie ich es will, ist, dass die current_password nur benötigt wird, wenn Sie das Feld password aktualisieren ... oder Sie müssen das "new_password" als Mittel zur Bestätigung wiederholen. Ich habe etwas über das Devise-Wiki gelesen, hauptsächlich die folgenden Links und sie scheinen keine Lösung dafür aufzulisten. Wenn jemand einen Einblick hat, wie dies erreicht werden könnte, würde ich es begrüßen.Passwort nur beim Ändern der Passwort-Registrierung anfordern

https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-password

https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-account-without-providing-a-password

Antwort

1

Also habe ich graben auf zu versuchen, dies zu lösen Ich habe die Lösung gefunden.

In meinem Modell (user.rb) Ich habe :validatable den folgenden Code-Snippet:

devise :omniauthable, :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, 
    :confirmable, :trackable, reset_password_keys:[:email, :company_id], 
    request_keys: [:host, :params], omniauth_providers: [:auth0] 

Da ist in meinem Registrierungscontroller, habe ich folgende:

def update_resource(resource, params) 
    if !params[:password].blank? 
    resource.password = params[:password] 
    resource.password_confirmation = params[:password_confirmation] 
    end 

    resource.update_without_password(params) 
end 

Und schließlich in mein Anwendungscontroller, fügte ich :password_confirmation zu dem folgenden Ausschnitt hinzu:

devise_parameter_sanitizer.permit(:account_update) do |u| 
    u.permit(:first_name, :last_name, :email, :password, :password_confirmation, :phone_number, :receive_emails, 
      location_attributes: [:id, :street, :city, :state, :zip, :country]) 
end 

Mit dieser Kombination, sobald das Formular eingereicht wird fallen in den update_resource Block, den ich überschrieben habe. Es wird überprüft, ob resource.password und password_confirmation identisch sind. Obendrein, dass jetzt current_password nicht in der Gleichung ist, müssen Sie nicht mehr jedes Mal Ihr Passwort eingeben, um Änderungen zu speichern.

1

Was Sie tun können, ist zu dem Zeitpunkt zu bestätigen, dass der Benutzer das Update auf sein Konto zu tun, durch die params params[:user][:password] und params[:user][:password_confirmation]:

Auf diese Weise, wenn es nein password noch password_confirmation dann verwenden Sie die update_without_password Methode über die user_params, die andere Möglichkeit ist es nur mit der update_attributes Methode

def update 
    ... 
    if params[:user][:password].blank? && params[:user][:password_confirmation].blank? 
     if @user.update_without_password(user_params) 
     flash[:notice] = 'User updated successfully' 
     redirect_to some_path 
     else 
     render :edit 
     end 
    else 
     if @user.update_attributes(user_params) 
     # login before update passing the current user 
     sign_in(User.find(current_user.id), :bypass => true) 
     flash[:notice] = 'User updated successfully' 
     redirect_to some_path 
     else 
     render :edit 
     end 
    end 
    ... 
    end 
+0

Ich schätze Ihre Hilfe, das endete nicht für mich. Ich habe die Lösung, die ich gefunden habe, veröffentlicht –

Verwandte Themen