私はdevise registerメソッドをカスタマイズして、より多くのパラメータで登録し、さらに更新することを試みました(これまでのところ運はありません)が、常にUnpermitted parameters:
エラー。これを使用してみました Deviseで追加の登録フィールドを追加 および https://github.com/plataformatec/devise#strong-parameters ですが、それを乗り越えることはできません。
また、ユーザーIDの外部キーを保持する新しいテーブルを作成し、user_id, display_name, profile_picture
、しかし、同じページからすべてを送信しようとすると、同じ問題が発生します(deviseコントローラーの問題)。
これを解決する方法について何か提案はありますか?他に何を投稿する必要がありますか?
routes.rb
devise_for :users, controllers: { registrations: 'users/registrations' }
users/regC
def create
build_resource(registration_params)
if resource.save
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_navigational_format?
sign_up(resource_name, resource)
respond_with resource, :location => after_sign_up_path_for(resource)
else
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
respond_with resource, :location => after_sign_up_path_for(resource)
end
else
clean_up_passwords
respond_with resource
end
end
private
def registration_paramss
params.require(:user).permit(:email, :display_name, :terms_of_services, :profile, :password, :password_confirmation)
end
どのパラメーターを許可するかを工夫するだけでいいようです。デフォルトでは、deviseは電子メール(または構成に応じてユーザー名)、パスワード、およびpassword_confirmationパラメーターを許可します。さらに追加するだけです。
devise documentation は、これを設定する「怠lazな方法」を示唆しています。
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:display_name])
end
end
文書はそれを言います
ネストされた属性がある場合(たとえば、
accepts_nested_attributes_for
を使用している場合)、それらのネストとタイプについてdeviseに伝える必要があります。
registrations#create
アクションをオーバーライドする必要がある場合にのみ、工夫のためのカスタムルートを提供する必要があります。その場合は、必ずsign_up_params
メソッドもオーバーライドしてください。
class Users::RegistrationsController < Devise::RegistrationsController
def create
# Your custom code here. Make sure you copy devise's functionality
end
private
# Notice the name of the method
def sign_up_params
params.require(:user).permit(:display_name, :email, :password, :password_confirmation)
end
end
基本的に、コントローラーで強力なパラメーターを構成する方法を把握するために、サインアップフォームがパラメーターを投稿する方法を調べる必要があります。 strong parameters 構文も必ず読んでください。
それが役に立てば幸い!
Devise 4.2.0では、これらの値をキーに追加することにより、ユーザーテーブルの追加パラメーターをホワイトリストに登録できます。デフォルトでは、deviseからコメントが出されます。以下に:avatar
を追加しました
# If you have extra params to permit, append them to the sanitizer.
def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute, :avatar])
end
私の場合、これはうまくいきました:
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:account_update) { |u| u.permit(:name, :last_name, :image,:email, :password, :password_confirmation, :current_password) }
end
end