Я сталкиваюсь с некоторыми ошибками при пользовательской аутентификации с использованием login
/ username
после следующего https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign-in-using-their-username-or-email-address.
КОНФИГУРАЦИЯ
- Ruby
2.5.1p57
- Рельсы
5.2.3
- Устройство
2.7.1
user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable,
:authentication_keys => { email: true, login: false }
validates :username, presence: :true, uniqueness: { case_sensitive: false }
attr_accessor :login
def login
@login || self.username || self.email
end
def self.find_for_database_authentication(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where_condition = [
"lower(username) = :value OR lower(email) = :value",
{ :value => login.downcase }
]
where(conditions.to_h).where(where_condition).first
elsif conditions.has_key?(:username) || conditions.has_key?(:email)
where(conditions.to_h).first
end
end
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first
else
if conditions[:username].nil?
where(conditions).first
else
where(username: conditions[:username]).first
end
end
end
end
application_controller.rb
class ApplicationController < ActionController::Base
respond_to :html, :json
before_action :authenticate_user!
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
base_attrs = %i[password password_confirmation remember_me]
sign_up_attrs = base_attrs + %i[username email]
sign_in_attrs = base_attrs + %i[login email]
devise_parameter_sanitizer.permit :sign_up, keys: sign_up_attrs
devise_parameter_sanitizer.permit :sign_in, keys: sign_in_attrs
end
end
sessions/new/html.slim
= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
.modal-header
h5#exampleModalCenterTitle.modal-title = t(".sign_in")
.modal-body
= f.input :login,
autofocus: true,
required: true
= f.input :password,
required: true,
minlength: 6,
input_html: { data: { toggle: 'password' } }
.modal-footer
= f.submit t(".sign_in")
initializers/devise.rb
config.authentication_keys = [:login]
ПОВЕДЕНИЕ
Каждый раз, когда я пытаюсь войти в систему, используя имя пользователя или адрес электронной почты, заданные в базе данных, введите егоне удается либо с неправильным вводом аутентификации.
Что я сделал не так, чтобы войти в мои пользователи с именем пользователя или электронной почтой?
Спасибо