有許多問題(即:here和here)解決了這個問題(並且對其他人也有同樣的問題),但他們都沒有爲我工作。編輯用戶時出現「未經許可的參數:current_password」
使用Rails 5.0.0和Devise 4.2,最終我試圖讓管理員編輯其他用戶,並允許普通用戶編輯自己的帳戶。 This需要a few modifications,因爲默認情況下,Devise不會讓登錄用戶編輯其他用戶。
users/:id/edit
視圖中的表格現在填充了正確的用戶,但更新失敗,日誌中有Unpermitted parameter: current_password
。我相信我需要白名單:current_password
,但沒有任何建議可以幫助我完成。
的routes.rb
devise_for :users, controllers: {registrations: 'registrations'}, path_prefix: 'my'
resources :users
(該path_prefix
「我」 的建議,以此來避免設計和:users
資源之間的航線衝突。)
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
使用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
你可能會奇怪,爲什麼我沒有加:current_password
到user_params
。這樣做會導致unknown attribute 'current_password' for User. error.(添加建議的attr_accessor
沒有幫助。)
這是我第一次需要定製Devise。任何幫助表示讚賞!
當您在控制檯中鍵入User.column_names時,您會得到什麼? –
=> [ 「ID」, 「電子郵件」, 「encrypted_password」, 「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「, 」角色「, 」FIRST_NAME「, 」姓氏「, 」current_cohort「, 」綽號「, 」位置「, 」目標「, 」他adshot「]是否current_password需要成爲該列表的成員?我想我認爲這是一種「僞」參數。 –
@JonathanDueck - 你絕對不需要在列表中包含'current_password'。 Devise專門爲用戶的帳戶更新操作公開此參數。 – 31piy