Rails разрабатывает "Неверный адрес электронной почты или пароль", когда пароль правильный, а адрес электронной почты не является параметром - PullRequest
0 голосов
/ 12 марта 2019

Я использую гем Devise для выполнения базовой аутентификации. В application_controller.rb у меня есть before_action:

def configure_permitted_parameters
   devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :password])
   devise_parameter_sanitizer.permit(:sign_in, keys: [:name, :password])
   devise_parameter_sanitizer.permit(:account_update, keys: [:name, :password])
end

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

Started POST "/users/sign_in" for 127.0.0.1 at 2019-03-12 02:47:06 -0700
Processing by Devise::SessionsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"ltvCys0g2WE8JWRaoQOYbt6LLe9mtJGCQ0hAoCiLCVsXAvfLuTpm02jrJnLjKk4AARSO1B9YLe3QyTTBs1d8iw==", "user"=>{"name"=>"my_name", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
Completed 401 Unauthorized in 3ms (ActiveRecord: 0.0ms)

Вот user.rb:

class User < ApplicationRecord
  devise :rememberable, :trackable, :lockable,
         :database_authenticatable, :timeoutable,
         :recoverable

  validates :name,
            :presence => true,
            :uniqueness => {
              :case_sensitive => false
            }

  def self.find_for_database_authentication(warden_conditions)
    conditions = warden_conditions.dup
    if login = conditions.delete(:login)
      where(conditions.to_hash)
        .where(["name = :value OR email = :value",
                { :value => login.downcase }]).first
    elsif conditions.has_key?(:name) || conditions.has_key?(:email)
      where(conditions.to_h).first
    end
  end

  def password_required?
    true
  end

end

А вот пользователь, как его видит консоль (слегка отредактированный):

pry(main)> ap me
#<User:0x000056172bdd0e80> {
                        :id => 1,
                      :name => "my_name",
                     :email => "my_name@example.com",
                     :phone => "520 555 1212",
                  :initials => "amp",
                      :role => "admin",
                    :active => true,
                :created_at => Fri, 08 Mar 2019 00:12:33 UTC +00:00,
                :updated_at => Mon, 11 Mar 2019 17:17:11 UTC +00:00,
           :current_prop_id => 1,
        :encrypted_password => "$2a$11$2s/n.eaBCF731fTor3hW2OsD9kLXQkJnjKLoFN/27vYku/1GbvzW2",
      :reset_password_token => nil,
    :reset_password_sent_at => nil,
       :remember_created_at => nil
}

Почему я не могу войти?

1 Ответ

5 голосов
/ 12 марта 2019

В Devise по умолчанию для входа используется электронная почта. Я вижу, что вы использовали имя для регистрации и входа. Чтобы использовать любой другой параметр для входа, необходимо изменить конфигурацию.

в наборе файлов config / initializers / devise.rb config.authentication_keys = [: имя пользователя]

Пожалуйста, обратитесь к следующим для получения более подробной информации: вход с помощью чего-то другого, кроме электронной почты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...