web-dev-qa-db-ja.com

工夫と強力なパラメータ

Rails 4.0のコアにRails $ ===コアが追加される可能性が高いので、このgem(devise + Strong Parameters)の両方を統合する方法を知りたい

助けてくれてありがとう

39
Rodrigo Zurek

Devise 4.xのアップデート

class ApplicationController < ActionController::Base
  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
    devise_parameter_sanitizer.permit(:sign_in, keys: [:username])
    devise_parameter_sanitizer.permit(:account_update, keys: [:username])
  end
end

両方の宝石を追加した後、deviseは通常どおり機能します。

更新:Devise 3.xの最新バージョンでは、 devise#strong-parameters で説明されているように、認証キー(通常は電子メールフィールド)、およびパスワードフィールドがすでに許可されています。ただし、サインアップフォームに追加のフィールドがある場合は、許可する追加のフィールドをDeviseに通知する必要があります。これを行う最も簡単な方法は、フィルターを使用することです。

class ApplicationController < ActionController::Base
  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :username
  end
end

Devise 2.xの場合、ユーザーモデルで汚染されたパラメーターを明示的にホワイトリストに登録する必要がある安全機能を使用する場合:

include ActiveModel::ForbiddenAttributesProtection

必要な変更は https://Gist.github.com/33507 にあり、一部のコントローラーをオーバーライドします。

54
ronalchn

簡単な方法は、単純なbeforeフィルターをApplicationControllerに追加することです。別の役割やその他のより複雑なシナリオがある場合は、以下のリンクに他のオプションがあります。

https://github.com/plataformatec/devise#strong-parameters

9
Leo
before_filter :configure_sanitized_params, if: :devise_controller?

def configure_sanitized_params
  devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:firstname, :designation_id, :middlename, :previous_experiance_year, :previous_experiance_month, :lastname, :email, :username, :password, :password_confirmation, :previous_experiance, :empid, :dob, :timezone, :doj, :gender, :education, :comments, :locked, :deactivated, :reason, :phone, :deactivated_date, :image) }
  devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:remove_image, :firstname, :designation_id, :middlename, :lastname, :email, :username, :empid, :dob, :timezone, :doj, :gender, :education, :comments, :locked, :deactivated, :reason, :phone, :deactivated_date, :image) }
end
1
Anoob K Bava

これを試すこともできます。ネストされたparams許可が含まれます

class ApplicationController < ActionController::Base
 before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
   devise_parameter_sanitizer.permit(:sign_up, keys: [:username,:phone])
  # permit nested attributes
  # devise_parameter_sanitizer.permit(:sign_up, keys: 
  # [:username,:phone,profile_attributes:[:firstname, :lastname]])
  end
end

これはRails 4および5のdeviseとRailsで動作します

0
uzaif