Adding name attribute to `User` in Devise

泪湿孤枕 提交于 2019-11-30 11:02:18

in your user model locate;

 attr_accessible :email, :password, :password_confirmation, :remember_me

and add :name on the end

Add this code to application_controller.rb

before_action :configure_permitted_parameters, if: :devise_controller?



protected
def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) }
  devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) }
  devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) }
end

For Rails 5 (in fact devise 4)

Tested for: rails 5.1.0 (devise 4.2.1)

There is no need to work with devise controllers.

Just add the following to your application_controller.rb:

before_action :configure_permitted_parameters, if:  :devise_controller?


protected

  def configure_permitted_parameters

    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])

  end

devise_parameter_sanitizer.for no longer works with Rails 5 (to be more correct, it is not supported in devise 4, which is the expected devise version in a Rails 5 context): use devise_parameter_sanitizer.permit to avoid undefined method 'for' for #<Devise::ParameterSanitizer error

For Rails 4

Use like this

protected
def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) }
  devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) }
  devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) }
end

Add additional fields at the end.

Yes. Add :name to attr_accessible in User Model

Write this code inside the ApplicationController class...

before_action :configure_permitted_parameters, if:  :devise_controller?

      protected

      def configure_permitted_parameters
        devise_parameter_sanitizer.for(:sign_up) << :name  

uncomment some of the generated code:

class Users::RegistrationsController < Devise::RegistrationsController
  before_filter :configure_sign_up_params, only: [:create]

  protected

  def configure_sign_up_params
    devise_parameter_sanitizer.for(:sign_up) << :name
  end
end
 private

   def sign_up_params
     params.require(:user).permit(:name,:email,:gender,:age,:password,:password_confirmation) if params[:user].present?
   end

Add this in the controller that extends devise's default registration controller

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!