簡體   English   中英

Rails和Devise的強參數

[英]Strong parameters with Rails and Devise

我正在使用rails 4.0分支的設計以及ruby 2.0.0p0和Rails 4.0.0.beta1。

這是一個問題,我在檢查我是否以正確的方式進行,或者我還有其他事情要做。 我確信很多人轉向Rails 4.0都面臨着同樣的問題(谷歌搜索類似的東西后)。

我已閱讀以下鏈接:

現在使用devise我創建了一個User模型,我使用上面的gists創建了以下控制器(並確保將它包含在我的routes文件中)。 我的額外參數是first_name和last_name。

class Users::RegistrationsController < Devise::RegistrationsController
  def sign_up_params
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
  end
  def account_update_params
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :current_password)
  end
  private :sign_up_params
  private :account_update_params
end

還有什么我應該做的嗎? 這是從現在開始做事的最佳方式(因為放棄了attr_accessor)。 我的表單似乎工作正常(新的和更新)。 gists說要使用“resource_params”,但總是在我的服務器日志中給出“Unpermitted parameters”錯誤。

感謝Devise的Rails4分支的最新更新,它不需要插入'resource_params'。

我已經創建了一個全新的Rails4應用程序,並遵循基本的Devise安裝步驟,我的應用程序正常工作,所以我想,你做得很好。

但是如果您需要,有一個修改后的要點,根據允許的參數為您提供一些額外的細節:

資料來源: https//gist.github.com/bluemont/e304e65e7e15d77d3cb9

# controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController

  before_filter :configure_permitted_parameters

  protected

  # my custom fields are :name, :heard_how
  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) do |u|
      u.permit(:name, :heard_how,
        :email, :password, :password_confirmation)
    end
    devise_parameter_sanitizer.for(:account_update) do |u|
      u.permit(:name,
        :email, :password, :password_confirmation, :current_password)
    end
  end
end

對於Rails 5,Devise 4使用此:

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

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :email, :password, :password_confirmation])
  end
end

參考

它在config/initializers添加一個模塊,並且所有parameters都非常好用

module DevisePermittedParameters
  extend ActiveSupport::Concern

  included do
    before_filter :configure_permitted_parameters
  end

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :email, :password, :password_confirmation) }
  end

end

DeviseController.send :include, DevisePermittedParameters

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM