Ruby on rails authlogic config (get rid of capitalization checks)

The authlogic rails attribute makes LOWER in the sql query.

SELECT * FROM `users` WHERE (LOWER(`users`.email) = 'test@example.com') LIMIT 1

I want to get rid of the LOWER part, as it seems to slow down the request a bit. I would prefer to simply reduce the case in the code, as this request seems expensive.

I am not sure where to change this behavior in authlogic.

Thank!

+3
source share
2 answers

This comment is from the lib/authlogic/acts_as_authentic/login.rbabove method find_by_smart_case_login_field:

    # This method allows you to find a record with the given login. If you notice, with ActiveRecord you have the
    # validates_uniqueness_of validation function. They give you a :case_sensitive option. I handle this in the same
    # manner that they handle that. If you are using the login field and set false for the :case_sensitive option in
    # validates_uniqueness_of_login_field_options this method will modify the query to look something like:
    #
    #   first(:conditions => ["LOWER(#{quoted_table_name}.#{login_field}) = ?", login.downcase])
    #
    # If you don't specify this it calls the good old find_by_* method:
    #
    #   find_by_login(login)
    #
    # The above also applies for using email as your login, except that you need to set the :case_sensitive in
    # validates_uniqueness_of_email_field_options to false.
    #
    # The only reason I need to do the above is for Postgres and SQLite since they perform case sensitive searches with the
    # find_by_* methods.

Have you installed case_sensitive = falseemail in your scan? If so, then you should solve this problem without having to fix any code.

+3
source

. act_as_authentic

  acts_as_authentic do |c|
      c.validates_uniqueness_of_email_field_options :case_sensitive => true
  end  
+2

Source: https://habr.com/ru/post/1746508/


All Articles