From 8b2d2c0a1b098e3aa2e85056a3658d1b527dc806 Mon Sep 17 00:00:00 2001 From: ujifgc Date: Tue, 9 Jul 2013 23:11:28 +0400 Subject: [PATCH] introduce case insensitive authentication by email, closes #1261 Supported ORMS: activerecord, datamapper, minirecord, mongoid, mongomapper, sequel ORMs not supporting case insensitive search: ohm Cryptic ORMS: couchrest --- .../generators/templates/account/activerecord.rb.tt | 2 +- .../padrino-admin/generators/templates/account/datamapper.rb.tt | 2 +- .../padrino-admin/generators/templates/account/minirecord.rb.tt | 2 +- .../padrino-admin/generators/templates/account/mongoid.rb.tt | 2 +- .../generators/templates/account/mongomapper.rb.tt | 2 +- .../lib/padrino-admin/generators/templates/account/sequel.rb.tt | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/padrino-admin/lib/padrino-admin/generators/templates/account/activerecord.rb.tt b/padrino-admin/lib/padrino-admin/generators/templates/account/activerecord.rb.tt index 4d31bac32..a0bc354a9 100644 --- a/padrino-admin/lib/padrino-admin/generators/templates/account/activerecord.rb.tt +++ b/padrino-admin/lib/padrino-admin/generators/templates/account/activerecord.rb.tt @@ -19,7 +19,7 @@ class <%= @model_name %> < ActiveRecord::Base # This method is for authentication purpose # def self.authenticate(email, password) - account = first(:conditions => { :email => email }) if email.present? + account = first(:conditions => ["lower(email) = lower(?)", email]) if email.present? account && account.has_password?(password) ? account : nil end diff --git a/padrino-admin/lib/padrino-admin/generators/templates/account/datamapper.rb.tt b/padrino-admin/lib/padrino-admin/generators/templates/account/datamapper.rb.tt index 8ccdbcf4c..f0469fbb8 100644 --- a/padrino-admin/lib/padrino-admin/generators/templates/account/datamapper.rb.tt +++ b/padrino-admin/lib/padrino-admin/generators/templates/account/datamapper.rb.tt @@ -29,7 +29,7 @@ class <%= @model_name %> # This method is for authentication purpose # def self.authenticate(email, password) - account = first(:conditions => { :email => email }) if email.present? + account = first(:conditions => ["lower(email) = lower(?)", email]) if email.present? account && account.has_password?(password) ? account : nil end diff --git a/padrino-admin/lib/padrino-admin/generators/templates/account/minirecord.rb.tt b/padrino-admin/lib/padrino-admin/generators/templates/account/minirecord.rb.tt index 46323f8f4..c324438f5 100644 --- a/padrino-admin/lib/padrino-admin/generators/templates/account/minirecord.rb.tt +++ b/padrino-admin/lib/padrino-admin/generators/templates/account/minirecord.rb.tt @@ -22,7 +22,7 @@ class <%= @model_name %> < ActiveRecord::Base # This method is for authentication purpose # def self.authenticate(email, password) - account = first(:conditions => { :email => email }) if email.present? + account = first(:conditions => ["lower(email) = lower(?)", email]) if email.present? account && account.has_password?(password) ? account : nil end diff --git a/padrino-admin/lib/padrino-admin/generators/templates/account/mongoid.rb.tt b/padrino-admin/lib/padrino-admin/generators/templates/account/mongoid.rb.tt index 6ebad7faa..a02b62f3c 100644 --- a/padrino-admin/lib/padrino-admin/generators/templates/account/mongoid.rb.tt +++ b/padrino-admin/lib/padrino-admin/generators/templates/account/mongoid.rb.tt @@ -27,7 +27,7 @@ class <%= @model_name %> # This method is for authentication purpose # def self.authenticate(email, password) - account = where(:email => email).first if email.present? + account = where(:email => /#{Regexp.escape(email)}/i).first if email.present? account && account.has_password?(password) ? account : nil end diff --git a/padrino-admin/lib/padrino-admin/generators/templates/account/mongomapper.rb.tt b/padrino-admin/lib/padrino-admin/generators/templates/account/mongomapper.rb.tt index 5801beb15..0f71f0ffc 100644 --- a/padrino-admin/lib/padrino-admin/generators/templates/account/mongomapper.rb.tt +++ b/padrino-admin/lib/padrino-admin/generators/templates/account/mongomapper.rb.tt @@ -27,7 +27,7 @@ class <%= @model_name %> # This method is for authentication purpose # def self.authenticate(email, password) - account = first(:email => email) if email.present? + account = first(:email => /#{Regexp.escape(email)}/i) if email.present? account && account.has_password?(password) ? account : nil end diff --git a/padrino-admin/lib/padrino-admin/generators/templates/account/sequel.rb.tt b/padrino-admin/lib/padrino-admin/generators/templates/account/sequel.rb.tt index 2d7584386..10b974132 100644 --- a/padrino-admin/lib/padrino-admin/generators/templates/account/sequel.rb.tt +++ b/padrino-admin/lib/padrino-admin/generators/templates/account/sequel.rb.tt @@ -26,7 +26,7 @@ class <%= @model_name %> < Sequel::Model # This method is for authentication purpose # def self.authenticate(email, password) - account = filter(:email => email).first + account = filter(Sequel.function(:lower, :email) => Sequel.function(:lower, email)).first account && account.has_password?(password) ? account : nil end