Devise — изменил authentication_keys на: войти после обновления с restful_authentication — неверный адрес электронной почты или ошибка пароля

#ruby-on-rails #devise

#ruby-on-rails #разработка

Вопрос:

Недавно я обновил свое приложение Rails с restful_authentication до devise, и по умолчанию страница входа в систему devise работала (аутентификация по электронной почте). Я не хочу проходить аутентификацию по электронной почте, хотя, когда я переместил аутентификацию в поле «login» в пользовательской модели, это больше не работает, и я получаю следующую ошибку:

Неверный адрес электронной почты или пароль.

Devise.rb

 config.authentication_keys = [ :login ]
  

User.rb

 class User < ActiveRecord::Base

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable, :trackable,
         :encryptable, :encryptor => :restful_authentication_sha1
  attr_accessible :login, :email, :password, :password_confirmation, :remember_me, :twitter_name, :twitter_id, :atoken, :asecret
  

новый.haml (для сеанса)

   = form_tag session_path, :class => 'enter_form' do
    %label.form_label_small{:for => "login", :style => "color: #336699"} username
    %br/
    = text_field_tag 'login', @login, :class => 'input_style_state', :style => 'width: 250px;'
    .clear{:style => 'height: 4px'}
    %label.form_label_small{:for => "password", :style => "color: #336699"} password
    %br/
    = password_field_tag 'password', nil, :style => 'width: 250px;'
    .clear{:style => 'height: 4px'}
    %p{:style => "padding: 0; margin:0;"}
      = check_box_tag 'remember_me', '1', @remember_me, :style => 'padding: 0; margin: 0; border: 0'
      = label_tag 'remember_me', 'remember me'
    .clear{:style => "height: 8px"} 
    %a.button.submit_form{:href => '/login'}
      %span{:style => 'width: 40px'}
        login
  

У меня была аналогичная проблема с другим проектом. Я полагаю, что если бы :login был успешно выбран в качестве ключа аутентификации, в сообщении об ошибке было бы указано «неверный логин или пароль», а не «неверный адрес электронной почты или пароль»

Есть идеи о том, как это исправить? Мои журналы ошибок ничего не говорят. Вот журнал:

 Started POST "/users/sign_in" for 127.0.0.1 at Thu Nov 10 13:46:13 -0500 2011
  Processing by Devise::SessionsController#create as HTML
  Parameters: {"authenticity_token"=>"AMole3YOhXPuOQGX27W1Mr7c18XR1Xk9DUF6JvstbZA=", "utf8"=>"✓", "user"=>{"remember_me"=>"0", "login"=>"aressidi", "password"=>"[FILTERED]"}}
  User Load (0.4ms)  SELECT `users`.* FROM `users` WHERE `users`.`login` = 'aressidi' LIMIT 1
  NavAd Load (0.3ms)  SELECT `nav_ads`.* FROM `nav_ads`
Completed   in 34ms
  Processing by Devise::SessionsController#new as HTML
  Parameters: {"authenticity_token"=>"AMole3YOhXPuOQGX27W1Mr7c18XR1Xk9DUF6JvstbZA=", "utf8"=>"✓", "user"=>{"remember_me"=>"0", "login"=>"aressidi", "password"=>"[FILTERED]"}}
  

Комментарии:

1. Моя проблема была решена, когда я перезапустил сервер после выполнения миграций. По какой-то причине сервер что-то кэшировал и не принимал учетные данные.

Ответ №1:

Сообщения об ошибках Devise не генерируются динамически, поэтому сообщение об ошибке не обязательно указывает на то, что оно просматривает неправильное поле для аутентификации. Смотрите http://asciicasts.com/episodes/210-customizing-devise

Также обратите внимание, какую версию ruby вы используете. Похоже, что Devise неправильно использует настройки config.authentication_keys в Ruby 1.9.3. Он начал работать сразу, как только я переключился обратно на Ruby 1.9.2.