2013-08-01 4 views
5

Я использую Rails 4.0 и Devise 3.0.0.rc.Вход с именем пользователя с помощью Devise with Rails 4

Я установил Devise с его настройками по умолчанию - то есть зарегистрируйтесь/используя свой адрес электронной почты. Тем не менее, я бы хотел, чтобы пользователи могли зарегистрироваться с именем пользователя вместо своего адреса электронной почты. Я следил за railscasts с точки зрения изменения параметров, плюс любые советы, которые я могу найти здесь, для вещей, которые мне могут потребоваться изменить для Rails 4. Однако всякий раз, когда я пытаюсь создать нового пользователя, я получаю сообщение об ошибке " электронная почта не может быть пустым ». Кто-нибудь имеет представление о том, что вызывает это, и как я могу это исправить? Благодаря!!

Код:

контроллер приложения:

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 
    before_filter :configure_permitted_parameters, if: :devise_controller? 

    protected 

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

Вход (зарегистрируетесь форме в значительной степени то же самое):

<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %> 
    <div><%= f.label :username %><br /> 
    <%= f.text_field :username, :autofocus => true %></div> 

В devise.rb конфигурации:

config.authentication_keys = [ :username ] 

пользователей Ролик:

private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_user 
     @user = User.find(params[:id]) 
    end 

# Never trust parameters from the scary internet, only allow the white list through. 
def user_params 
    params.require(:user).permit(:first_name, :middle_names, :last_name, :date_of_birth, :gender, :line_1, :line_2, :line_3, :town, :county, :postcode, :contact_number, :email, :username, :password, :password_confirmation, :remember_me) 
end 

user.rb:

protected 

    def self.find_for_database_authentication(warden_conditions) 
    conditions = warden_conditions.dup 
    login = conditions.delete(:login) 
    where(conditions).where(["lower(username) = :value", { :value => login.downcase }]).first 
    end 

ответ

4

Удалить validatable из User модели devise секции - эта опция проверяет наличие, уникальность и формат адреса электронной почты. Однако вам придется вручную добавить свои собственные подтверждения наличия, подтверждения и длины пароля.

+0

Это отлично работает, спасибо. Не могу поверить, что я пропустил это! Возможно, Devise должен добавить параметр, чтобы изменить все проверки на общие параметры, такие как имя пользователя, а не только на электронную почту ...? – ecs

+3

Возможно, это не понадобится. Вы все равно можете использовать модуль validatable и просто отключить требование присутствия электронной почты, указав метод 'def email_required? false end' в вашем классе User. – eugen

+0

Спасибо, я пытался исправить это в течение нескольких часов, и это действительно работает. – Michael

Смежные вопросы