[英]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.