Rails - Devise - Невозможное соединение с логином / именем пользователя - PullRequest
0 голосов
/ 26 октября 2019

Я сталкиваюсь с некоторыми ошибками при пользовательской аутентификации с использованием 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]

ПОВЕДЕНИЕ

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

Что я сделал не так, чтобы войти в мои пользователи с именем пользователя или электронной почтой?

Спасибо

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