Как добавить поле имени пользователя в devise gem?

вот что я пытался,

  1. rails g migration add_username_to_hrs

  2. bundle exec rake db:migrate

  3. добавил attr_accessible:username

  4. перезапустить сервер

мой add_username_to_hr.

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

неопределенный метод "имя пользователя" для #

вопрос: как добавить имя пользователя поле в моем драгоценном камне?

6 ответов


Я сделал то же самое. Пожалуйста, выполните следующие действия:

  1. rails generate migration add_username_to_users username:string:uniq

  2. rake db:migrate

  3. добавить attr_accessible :username

  4. в 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. в config / initializers если вы хотите заменить email by usernname

    config.authentication_keys = [ :username ]
    config.case_insensitive_keys = [ :username ]  
    config.strip_whitespace_keys = [ :username ]
    
  6. обновить вид.

Примечание если attr_accessible :usernameдает ошибку try attr_accessor :username


в разработать wiki для позволяя пользователям войти с именем пользователя, может быть, это может помочь вам?


Если вы используете rails 4, то поместите ниже код в 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

если вы используете rails 4, выполните следующие действия:

  1. rails g migration AddUserNameToAuthorize

  2. rake db:migrate

  3. введите этот код в application_controller.rb принять параметр username для sign_in, sign_up, а также 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
    

Devise фактически добавляет поле к модели, которую вы указали во время настройки devise. Если у вас есть добавить миграцию в эту модель. Например, вы использовали devise для модели пользователя, затем вы можете создать миграцию для добавления имени пользователя в модель пользователя и запустить db:migrate и добавить attr_accessible :username to model, если вы используете rails


вы должны добавить имя пользователя в модель, которую вы дали ниже command

rails g devise <modelname>

Как только вы закончите, вам нужно выполнить вышеуказанные шаги, но вам нужно изменить файл конфигурации devise, чтобы искать имя пользователя для входа вместо электронной почты. Затем перезапустите rails server, и все будет в порядке.