Es gibt zahlreiche Fragen (zB: here und here), die dieses Problem beheben (und waren nützlich für andere mit dem gleichen Problem), aber keiner von ihnen hat noch für mich gearbeitet."Unerreichter Parameter: current_password" beim Bearbeiten von Benutzer
Mit Rails 5.0.0 und Devise 4.2, schließlich versuche ich Admins zu erlauben, andere Benutzer zu bearbeiten und regelmäßigen Benutzern zu erlauben, ihre eigenen Konten zu bearbeiten. This erforderlich a few modifications, da Devise den eingeloggten Benutzer standardmäßig nicht berechtigt, andere Benutzer zu bearbeiten.
Das Formular in der users/:id/edit
Ansicht wird jetzt mit dem richtigen Benutzer ausgefüllt, aber die Aktualisierung schlägt fehl, mit Unpermitted parameter: current_password
in den Protokollen. Ich glaube, dass ich :current_password
Whitelist muss, aber keiner der Vorschläge erreicht dies für mich.
routes.rb
devise_for :users, controllers: {registrations: 'registrations'}, path_prefix: 'my'
resources :users
(Die path_prefix
"my" als eine Möglichkeit vorgeschlagen wurde Route Konflikte zwischen Einfallsreichtum und die :users
Ressource. Zu vermeiden)
registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
before_action :configure_permitted_parameters, if: :devise_controller?
...
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) do |u|
u.permit(:password, :password_confirmation)
end
devise_parameter_sanitizer.for(:account_update) do |u|
u.permit(:password, :password_confirmation, :current_password)
end
end
end
verwenden rs_controller.rb
class UsersController < ApplicationController
before_action :set_user, only: [:edit, :show, :update, :destroy]
...
def edit
end
def update
@user = User.find(params[:id])
if @user.update(user_params)
redirect_to cohorts_path
else
render 'edit'
end
end
private
def set_user
@user = User.find(params[:id])
end
def user_params
params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :roles, :nickname, :location, :headshot, :goals)
end
end
Sie fragen sich vielleicht, warum ich nicht :current_password
zum user_params
hinzugefügt haben. Dies führt zu einem unknown attribute 'current_password' for User. error. (Hinzufügen der vorgeschlagenen attr_accessor
hat nicht geholfen.)
Dies ist das erste Mal, dass ich Devise anpassen musste. Jede Hilfe wird geschätzt!
Was erhalten Sie, wenn Sie 'User.column_names' in Ihrer Konsole eingeben? –
=> [ "id", "E-Mail", "verschluesseltes_passwort", "reset_password_token", "reset_password_sent_at", "remember_created_at", "sign_in_count", "current_sign_in_at", "last_sign_in_at", " current_sign_in_ip " "last_sign_in_ip" "created_at" "updated_at" "Rollen", "first_name" "last_name" "current_cohort" "Spitznamen" "location", " Ziele ", " er adshot "] Muss current_password ein Mitglied dieser Liste sein? Ich denke, ich dachte, es wäre ein "Pseudo" -Parameter. –
@ JonathanDueck - Nein, Sie müssen auf keinen Fall 'current_password' in die Liste aufnehmen. Devise macht diesen Parameter ausschließlich für die Kontoaktualisierungsaktion des Benutzers verfügbar. – 31piy