当密码正确且电子邮件不是参数时,Rails Devise“无效的电子邮件或密码”

时间:2019-03-12 10:50:58

标签: ruby-on-rails devise

我正在使用MapView.Java gem执行基本身份验证。在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

为什么我无法登录?

1 个答案:

答案 0 :(得分:5)

Devise默认情况下使用电子邮件进行登录。我看到您使用名称进行注册和登录。为了将其他任何参数用于登录,需要修改配置。

config / initializers / devise.rb文件集中的

config.authentication_keys = [:用户名]

请参考以下内容以获取更多详细信息: signing in with something other than email