module Devise::Models::Authenticatable::ClassMethods

def find_or_initialize_with_errors(required_attributes, attributes, error = :invalid) #:nodoc:

:nodoc:
Find or initialize a record with group of attributes based on a list of required attributes.
def find_or_initialize_with_errors(required_attributes, attributes, error = :invalid) #:nodoc:
  attributes.try(:permit!)
  attributes = attributes.to_h.with_indifferent_access
                         .slice(*required_attributes)
                         .delete_if { |key, value| value.blank? }
  if attributes.size == required_attributes.size
    record = find_first_by_auth_conditions(attributes) and return record
  end
  new(devise_parameter_filter.filter(attributes)).tap do |record|
    required_attributes.each do |key|
      record.errors.add(key, attributes[key].blank? ? :blank : error)
    end
  end
end