web-dev-qa-db-ja.com

登録を考案するためのカスタムパラメータの追加-許可されていないパラメータ

私は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
10
Bogdan Daniel

どのパラメーターを許可するかを工夫するだけでいいようです。デフォルトでは、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 構文も必ず読んでください。

それが役に立てば幸い!

23
gkats

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
9
Jbur43

私の場合、これはうまくいきました:

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
0
Nezir