Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add username field to devise gem?

Here is what I tried,

  1. rails g migration add_username_to_hrs

  2. bundle exec rake db:migrate

  3. added the attr_accessible:username

  4. restarted the server

My add_username_to_hr.rb

class AddUsernameToAuthorize < ActiveRecord::Migration
 def change
    add_column :authorizes, :username, :string
 end
end

Error

undefined method `username' for #

Question: How can I add a username field in my devise gem?

like image 553
bindi bhatt Avatar asked Jan 31 '14 10:01

bindi bhatt


4 Answers

Answer is now outdated [ Valid for rails4 ]

I have done the same. Please follow these steps:

  1. rails generate migration add_username_to_users username:string:uniq

  2. rake db:migrate

  3. add attr_accessible :username

  4. in 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 
    
  5. in config/initializers if you want to replace email by usernname

    config.authentication_keys = [ :username ]
    config.case_insensitive_keys = [ :username ]  
    config.strip_whitespace_keys = [ :username ]
    
  6. update the views.

Note if attr_accessible :usernamegives error try attr_accessor :username

like image 157
SNEH PANDYA Avatar answered Oct 25 '22 19:10

SNEH PANDYA


If you are using rails 4 then put below code in application controller

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

 protected

 def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) << :username
 end
end
like image 34
Divyang Hirpara Avatar answered Oct 25 '22 20:10

Divyang Hirpara


If you are using rails 4 then follow this steps:

  1. rails g migration AddUserNameToAuthorize

  2. rake db:migrate

  3. put this code in application_controller.rb to accept username parameter for sign_in, sign_up and also for account_update:

    class ApplicationController < ActionController::Base
        protect_from_forgery with: :exception
        def configure_permitted_parameters
          devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:email, :password,:username) }
          devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation,:username) }
          devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation,:username) }
        end
    end
    
like image 31
KKB Avatar answered Oct 25 '22 21:10

KKB


Devise actually add the field to model which you specified during devise setup. If You have add migration to that model. For example, you have used devise for user model, then you can generate migration for adding the username to user model and run the db:migrate and add the attr_accessible :username to model, if you are using rails < 4

like image 2
Sanjiv Avatar answered Oct 25 '22 21:10

Sanjiv