Empact-authlogic 2.1.5 → 3.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Empact-authlogic.gemspec +190 -187
- data/Gemfile +10 -0
- data/Gemfile.lock +49 -0
- data/LICENSE +1 -1
- data/README.rdoc +14 -10
- data/Rakefile +5 -5
- data/VERSION.yml +3 -3
- data/lib/authlogic/acts_as_authentic/base.rb +14 -12
- data/lib/authlogic/acts_as_authentic/email.rb +12 -12
- data/lib/authlogic/acts_as_authentic/logged_in_status.rb +8 -9
- data/lib/authlogic/acts_as_authentic/login.rb +19 -18
- data/lib/authlogic/acts_as_authentic/password.rb +3 -3
- data/lib/authlogic/acts_as_authentic/perishable_token.rb +15 -15
- data/lib/authlogic/acts_as_authentic/persistence_token.rb +1 -1
- data/lib/authlogic/authenticates_many/base.rb +3 -4
- data/lib/authlogic/controller_adapters/rails_adapter.rb +1 -1
- data/lib/authlogic/random.rb +1 -1
- data/lib/authlogic/session/active_record_trickery.rb +8 -0
- data/lib/authlogic/session/callbacks.rb +2 -2
- data/lib/authlogic/session/cookies.rb +54 -2
- data/lib/authlogic/session/foundation.rb +17 -3
- data/lib/authlogic/session/http_auth.rb +43 -2
- data/lib/authlogic/session/scopes.rb +9 -9
- data/lib/authlogic/test_case/mock_controller.rb +12 -2
- data/lib/generators/authlogic/USAGE +8 -0
- data/lib/generators/authlogic/session_generator.rb +14 -0
- data/lib/generators/authlogic/templates/session.rb +2 -0
- data/test/acts_as_authentic_test/base_test.rb +1 -1
- data/test/acts_as_authentic_test/email_test.rb +29 -21
- data/test/acts_as_authentic_test/logged_in_status_test.rb +1 -1
- data/test/acts_as_authentic_test/login_test.rb +1 -1
- data/test/acts_as_authentic_test/magic_columns_test.rb +1 -1
- data/test/acts_as_authentic_test/password_test.rb +1 -1
- data/test/acts_as_authentic_test/perishable_token_test.rb +1 -1
- data/test/acts_as_authentic_test/persistence_token_test.rb +1 -1
- data/test/acts_as_authentic_test/restful_authentication_test.rb +1 -1
- data/test/acts_as_authentic_test/session_maintenance_test.rb +1 -1
- data/test/acts_as_authentic_test/single_access_test.rb +1 -1
- data/test/authenticates_many_test.rb +1 -1
- data/test/crypto_provider_test/aes256_test.rb +1 -1
- data/test/crypto_provider_test/bcrypt_test.rb +1 -1
- data/test/crypto_provider_test/sha1_test.rb +1 -1
- data/test/crypto_provider_test/sha256_test.rb +1 -1
- data/test/crypto_provider_test/sha512_test.rb +1 -1
- data/test/i18n_test.rb +1 -1
- data/test/random_test.rb +1 -8
- data/test/session_test/activation_test.rb +1 -1
- data/test/session_test/active_record_trickery_test.rb +12 -2
- data/test/session_test/brute_force_protection_test.rb +1 -1
- data/test/session_test/callbacks_test.rb +1 -1
- data/test/session_test/cookies_test.rb +26 -2
- data/test/session_test/existence_test.rb +1 -1
- data/test/session_test/http_auth_test.rb +31 -3
- data/test/session_test/id_test.rb +1 -1
- data/test/session_test/klass_test.rb +1 -1
- data/test/session_test/magic_columns_test.rb +1 -1
- data/test/session_test/magic_states_test.rb +1 -1
- data/test/session_test/params_test.rb +1 -1
- data/test/session_test/password_test.rb +1 -1
- data/test/session_test/perishability_test.rb +1 -1
- data/test/session_test/persistence_test.rb +1 -1
- data/test/session_test/scopes_test.rb +12 -12
- data/test/session_test/session_test.rb +1 -1
- data/test/session_test/timeout_test.rb +1 -1
- data/test/session_test/unauthorized_record_test.rb +1 -1
- data/test/session_test/validation_test.rb +1 -1
- data/test/test_helper.rb +27 -41
- metadata +50 -55
- data/.gitignore +0 -9
- data/CHANGELOG.rdoc +0 -353
data/LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
= Authlogic
|
2
2
|
|
3
|
+
** Please note the latest version is compatible with rails 3 only. Rails 2 should use version 2.X.X **
|
4
|
+
|
3
5
|
Authlogic is a clean, simple, and unobtrusive ruby authentication solution.
|
4
6
|
|
5
7
|
A code example can replace a thousand words...
|
@@ -67,8 +69,12 @@ If you find a bug or a problem please post it in the issues section. If you need
|
|
67
69
|
* <b>Authlogic OpenID addon:</b> http://github.com/binarylogic/authlogic_openid
|
68
70
|
* <b>Authlogic LDAP addon:</b> http://github.com/binarylogic/authlogic_ldap
|
69
71
|
* <b>Authlogic Facebook Connect:</b> http://github.com/kalasjocke/authlogic_facebook_connect
|
72
|
+
* <b>Authlogic Facebook Connect (New JS API):</b> http://github.com/studybyte/authlogic_facebook_connect
|
73
|
+
* <b>Authlogic Facebook Shim</b> http://github.com/james2m/authlogic_facebook_shim
|
70
74
|
* <b>Authlogic OAuth (Twitter):</b> http://github.com/jrallison/authlogic_oauth
|
75
|
+
* <b>Authlogic Oauth and OpenID:</b> http://github.com/viatropos/authlogic-connect
|
71
76
|
* <b>Authlogic PAM:</b> http://github.com/nbudin/authlogic_pam
|
77
|
+
* <b>Authlogic x509:</b> http://github.com/auth-scc/authlogic_x509
|
72
78
|
|
73
79
|
If you create one of your own, please let me know about it so I can add it to this list. Or just fork the project, add your link, and send me a pull request.
|
74
80
|
|
@@ -150,7 +156,7 @@ What if your user sessions controller could look just like your other controller
|
|
150
156
|
def new
|
151
157
|
@user_session = UserSession.new
|
152
158
|
end
|
153
|
-
|
159
|
+
|
154
160
|
def create
|
155
161
|
@user_session = UserSession.new(params[:user_session])
|
156
162
|
if @user_session.save
|
@@ -159,7 +165,7 @@ What if your user sessions controller could look just like your other controller
|
|
159
165
|
render :action => :new
|
160
166
|
end
|
161
167
|
end
|
162
|
-
|
168
|
+
|
163
169
|
def destroy
|
164
170
|
current_user_session.destroy
|
165
171
|
redirect_to new_user_session_url
|
@@ -183,13 +189,13 @@ Or how about persisting the session...
|
|
183
189
|
|
184
190
|
class ApplicationController
|
185
191
|
helper_method :current_user_session, :current_user
|
186
|
-
|
192
|
+
|
187
193
|
private
|
188
194
|
def current_user_session
|
189
195
|
return @current_user_session if defined?(@current_user_session)
|
190
196
|
@current_user_session = UserSession.find
|
191
197
|
end
|
192
|
-
|
198
|
+
|
193
199
|
def current_user
|
194
200
|
return @current_user if defined?(@current_user)
|
195
201
|
@current_user = current_user_session && current_user_session.user
|
@@ -200,17 +206,15 @@ Or how about persisting the session...
|
|
200
206
|
|
201
207
|
Install the gem / plugin (recommended)
|
202
208
|
|
203
|
-
|
209
|
+
Rails 3:
|
204
210
|
|
205
211
|
$ sudo gem install authlogic
|
206
212
|
|
207
|
-
|
208
|
-
|
209
|
-
$ sudo gem install binarylogic-authlogic
|
213
|
+
Rails 2:
|
210
214
|
|
211
|
-
|
215
|
+
$ sudo gem install authlogic --version=2.1.6
|
212
216
|
|
213
|
-
Or
|
217
|
+
Or install as a plugin:
|
214
218
|
|
215
219
|
script/plugin install git://github.com/binarylogic/authlogic.git
|
216
220
|
|
data/Rakefile
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake'
|
3
|
+
require 'bundler'
|
4
|
+
|
5
|
+
Bundler.setup
|
3
6
|
|
4
7
|
begin
|
5
8
|
require 'jeweler'
|
@@ -9,10 +12,9 @@ begin
|
|
9
12
|
gem.email = "bjohnson@binarylogic.com"
|
10
13
|
gem.homepage = "http://github.com/binarylogic/authlogic"
|
11
14
|
gem.authors = ["Ben Johnson of Binary Logic", "Ben Woosley"]
|
12
|
-
gem.
|
13
|
-
gem.add_dependency "activesupport"
|
15
|
+
gem.add_bundler_dependencies
|
14
16
|
end
|
15
|
-
Jeweler::
|
17
|
+
Jeweler::GemcutterTasks.new
|
16
18
|
rescue LoadError
|
17
19
|
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
18
20
|
end
|
@@ -37,6 +39,4 @@ rescue LoadError
|
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
40
|
-
task :test => :check_dependencies
|
41
|
-
|
42
42
|
task :default => :test
|
data/VERSION.yml
CHANGED
@@ -4,6 +4,9 @@ module Authlogic
|
|
4
4
|
module Base
|
5
5
|
def self.included(klass)
|
6
6
|
klass.class_eval do
|
7
|
+
class_attribute :acts_as_authentic_modules, :acts_as_authentic_config
|
8
|
+
self.acts_as_authentic_modules ||= []
|
9
|
+
self.acts_as_authentic_config ||= {}
|
7
10
|
extend Config
|
8
11
|
end
|
9
12
|
end
|
@@ -41,7 +44,7 @@ module Authlogic
|
|
41
44
|
#
|
42
45
|
# That being said, this is your tool for extending Authlogic and "hooking" into the acts_as_authentic call.
|
43
46
|
def add_acts_as_authentic_module(mod, action = :append)
|
44
|
-
modules = acts_as_authentic_modules
|
47
|
+
modules = acts_as_authentic_modules.clone
|
45
48
|
case action
|
46
49
|
when :append
|
47
50
|
modules << mod
|
@@ -49,21 +52,17 @@ module Authlogic
|
|
49
52
|
modules = [mod] + modules
|
50
53
|
end
|
51
54
|
modules.uniq!
|
52
|
-
|
55
|
+
self.acts_as_authentic_modules = modules
|
53
56
|
end
|
54
57
|
|
55
58
|
# This is the same as add_acts_as_authentic_module, except that it removes the module from the list.
|
56
59
|
def remove_acts_as_authentic_module(mod)
|
57
|
-
acts_as_authentic_modules.
|
58
|
-
|
60
|
+
modules = acts_as_authentic_modules.clone
|
61
|
+
modules.delete(mod)
|
62
|
+
self.acts_as_authentic_modules = modules
|
59
63
|
end
|
60
|
-
|
64
|
+
|
61
65
|
private
|
62
|
-
def acts_as_authentic_modules
|
63
|
-
key = :acts_as_authentic_modules
|
64
|
-
inheritable_attributes.include?(key) ? read_inheritable_attribute(key) : []
|
65
|
-
end
|
66
|
-
|
67
66
|
def db_setup?
|
68
67
|
begin
|
69
68
|
column_names
|
@@ -75,9 +74,12 @@ module Authlogic
|
|
75
74
|
|
76
75
|
def rw_config(key, value, default_value = nil, read_value = nil)
|
77
76
|
if value == read_value
|
78
|
-
|
77
|
+
acts_as_authentic_config.include?(key) ? acts_as_authentic_config[key] : default_value
|
79
78
|
else
|
80
|
-
|
79
|
+
config = acts_as_authentic_config.clone
|
80
|
+
config[key] = value
|
81
|
+
self.acts_as_authentic_config = config
|
82
|
+
value
|
81
83
|
end
|
82
84
|
end
|
83
85
|
|
@@ -11,7 +11,7 @@ module Authlogic
|
|
11
11
|
add_acts_as_authentic_module(Methods)
|
12
12
|
end
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
# Configuration to modify how Authlogic handles the email field.
|
16
16
|
module Config
|
17
17
|
# The name of the field that stores email addresses.
|
@@ -22,7 +22,7 @@ module Authlogic
|
|
22
22
|
rw_config(:email_field, value, first_column_to_exist(nil, :email, :email_address))
|
23
23
|
end
|
24
24
|
alias_method :email_field=, :email_field
|
25
|
-
|
25
|
+
|
26
26
|
# Toggles validating the email field or not.
|
27
27
|
#
|
28
28
|
# * <tt>Default:</tt> true
|
@@ -31,20 +31,20 @@ module Authlogic
|
|
31
31
|
rw_config(:validate_email_field, value, true)
|
32
32
|
end
|
33
33
|
alias_method :validate_email_field=, :validate_email_field
|
34
|
-
|
34
|
+
|
35
35
|
# A hash of options for the validates_length_of call for the email field. Allows you to change this however you want.
|
36
36
|
#
|
37
37
|
# <b>Keep in mind this is ruby. I wanted to keep this as flexible as possible, so you can completely replace the hash or
|
38
38
|
# merge options into it. Checkout the convenience function merge_validates_length_of_email_field_options to merge
|
39
39
|
# options.</b>
|
40
40
|
#
|
41
|
-
# * <tt>Default:</tt> {:
|
41
|
+
# * <tt>Default:</tt> {:maximum => 100}
|
42
42
|
# * <tt>Accepts:</tt> Hash of options accepted by validates_length_of
|
43
43
|
def validates_length_of_email_field_options(value = nil)
|
44
|
-
rw_config(:validates_length_of_email_field_options, value, {:
|
44
|
+
rw_config(:validates_length_of_email_field_options, value, {:maximum => 100})
|
45
45
|
end
|
46
46
|
alias_method :validates_length_of_email_field_options=, :validates_length_of_email_field_options
|
47
|
-
|
47
|
+
|
48
48
|
# A convenience function to merge options into the validates_length_of_email_field_options. So intead of:
|
49
49
|
#
|
50
50
|
# self.validates_length_of_email_field_options = validates_length_of_email_field_options.merge(:my_option => my_value)
|
@@ -55,25 +55,25 @@ module Authlogic
|
|
55
55
|
def merge_validates_length_of_email_field_options(options = {})
|
56
56
|
self.validates_length_of_email_field_options = validates_length_of_email_field_options.merge(options)
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
# A hash of options for the validates_format_of call for the email field. Allows you to change this however you want.
|
60
60
|
#
|
61
61
|
# <b>Keep in mind this is ruby. I wanted to keep this as flexible as possible, so you can completely replace the hash or
|
62
62
|
# merge options into it. Checkout the convenience function merge_validates_format_of_email_field_options to merge
|
63
63
|
# options.</b>
|
64
64
|
#
|
65
|
-
# * <tt>Default:</tt> {:with => Authlogic::Regex.email, :message => I18n.t('error_messages.email_invalid', :default => "should look like an email address.")}
|
65
|
+
# * <tt>Default:</tt> {:with => Authlogic::Regex.email, :message => lambda {I18n.t('error_messages.email_invalid', :default => "should look like an email address.")}}
|
66
66
|
# * <tt>Accepts:</tt> Hash of options accepted by validates_format_of
|
67
67
|
def validates_format_of_email_field_options(value = nil)
|
68
68
|
rw_config(:validates_format_of_email_field_options, value, {:with => Authlogic::Regex.email, :message => I18n.t('error_messages.email_invalid', :default => "should look like an email address.")})
|
69
69
|
end
|
70
70
|
alias_method :validates_format_of_email_field_options=, :validates_format_of_email_field_options
|
71
|
-
|
71
|
+
|
72
72
|
# See merge_validates_length_of_email_field_options. The same thing except for validates_format_of_email_field_options.
|
73
73
|
def merge_validates_format_of_email_field_options(options = {})
|
74
74
|
self.validates_format_of_email_field_options = validates_format_of_email_field_options.merge(options)
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
# A hash of options for the validates_uniqueness_of call for the email field. Allows you to change this however you want.
|
78
78
|
#
|
79
79
|
# <b>Keep in mind this is ruby. I wanted to keep this as flexible as possible, so you can completely replace the hash or
|
@@ -86,13 +86,13 @@ module Authlogic
|
|
86
86
|
rw_config(:validates_uniqueness_of_email_field_options, value, {:case_sensitive => false, :scope => validations_scope, :if => "#{email_field}_changed?".to_sym})
|
87
87
|
end
|
88
88
|
alias_method :validates_uniqueness_of_email_field_options=, :validates_uniqueness_of_email_field_options
|
89
|
-
|
89
|
+
|
90
90
|
# See merge_validates_length_of_email_field_options. The same thing except for validates_uniqueness_of_email_field_options.
|
91
91
|
def merge_validates_uniqueness_of_email_field_options(options = {})
|
92
92
|
self.validates_uniqueness_of_email_field_options = validates_uniqueness_of_email_field_options.merge(options)
|
93
93
|
end
|
94
94
|
end
|
95
|
-
|
95
|
+
|
96
96
|
# All methods relating to the email field
|
97
97
|
module Methods
|
98
98
|
def self.included(klass)
|
@@ -11,7 +11,7 @@ module Authlogic
|
|
11
11
|
add_acts_as_authentic_module(Methods)
|
12
12
|
end
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
# All configuration for the logged in status feature set.
|
16
16
|
module Config
|
17
17
|
# The timeout to determine when a user is logged in or not.
|
@@ -23,32 +23,31 @@ module Authlogic
|
|
23
23
|
end
|
24
24
|
alias_method :logged_in_timeout=, :logged_in_timeout
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
# All methods for the logged in status feature seat.
|
28
28
|
module Methods
|
29
29
|
def self.included(klass)
|
30
30
|
return if !klass.column_names.include?("last_request_at")
|
31
|
-
|
31
|
+
|
32
32
|
klass.class_eval do
|
33
33
|
include InstanceMethods
|
34
|
-
|
35
|
-
|
36
|
-
named_scope :logged_out, lambda { {:conditions => ["last_request_at is NULL or last_request_at <= ?", logged_in_timeout.seconds.ago]} }
|
34
|
+
scope :logged_in, where("last_request_at > ?", logged_in_timeout.seconds.ago)
|
35
|
+
scope :logged_out, where("last_request_at is NULL or last_request_at <= ?", logged_in_timeout.seconds.ago)
|
37
36
|
end
|
38
37
|
end
|
39
|
-
|
38
|
+
|
40
39
|
module InstanceMethods
|
41
40
|
# Returns true if the last_request_at > logged_in_timeout.
|
42
41
|
def logged_in?
|
43
42
|
raise "Can not determine the records login state because there is no last_request_at column" if !respond_to?(:last_request_at)
|
44
43
|
!last_request_at.nil? && last_request_at > logged_in_timeout.seconds.ago
|
45
44
|
end
|
46
|
-
|
45
|
+
|
47
46
|
# Opposite of logged_in?
|
48
47
|
def logged_out?
|
49
48
|
!logged_in?
|
50
49
|
end
|
51
|
-
|
50
|
+
|
52
51
|
private
|
53
52
|
def logged_in_timeout
|
54
53
|
self.class.logged_in_timeout
|
@@ -8,8 +8,8 @@ module Authlogic
|
|
8
8
|
add_acts_as_authentic_module(Methods)
|
9
9
|
end
|
10
10
|
end
|
11
|
-
|
12
|
-
#
|
11
|
+
|
12
|
+
# Configuration for the login field.
|
13
13
|
module Config
|
14
14
|
# The name of the login field in the database.
|
15
15
|
#
|
@@ -19,8 +19,8 @@ module Authlogic
|
|
19
19
|
rw_config(:login_field, value, first_column_to_exist(nil, :login, :username))
|
20
20
|
end
|
21
21
|
alias_method :login_field=, :login_field
|
22
|
-
|
23
|
-
# Whether or not
|
22
|
+
|
23
|
+
# Whether or not to validate the login field
|
24
24
|
#
|
25
25
|
# * <tt>Default:</tt> true
|
26
26
|
# * <tt>Accepts:</tt> Boolean
|
@@ -28,7 +28,7 @@ module Authlogic
|
|
28
28
|
rw_config(:validate_login_field, value, true)
|
29
29
|
end
|
30
30
|
alias_method :validate_login_field=, :validate_login_field
|
31
|
-
|
31
|
+
|
32
32
|
# A hash of options for the validates_length_of call for the login field. Allows you to change this however you want.
|
33
33
|
#
|
34
34
|
# <b>Keep in mind this is ruby. I wanted to keep this as flexible as possible, so you can completely replace the hash or
|
@@ -41,8 +41,8 @@ module Authlogic
|
|
41
41
|
rw_config(:validates_length_of_login_field_options, value, {:within => 3..100})
|
42
42
|
end
|
43
43
|
alias_method :validates_length_of_login_field_options=, :validates_length_of_login_field_options
|
44
|
-
|
45
|
-
# A convenience function to merge options into the validates_length_of_login_field_options. So
|
44
|
+
|
45
|
+
# A convenience function to merge options into the validates_length_of_login_field_options. So instead of:
|
46
46
|
#
|
47
47
|
# self.validates_length_of_login_field_options = validates_length_of_login_field_options.merge(:my_option => my_value)
|
48
48
|
#
|
@@ -52,25 +52,25 @@ module Authlogic
|
|
52
52
|
def merge_validates_length_of_login_field_options(options = {})
|
53
53
|
self.validates_length_of_login_field_options = validates_length_of_login_field_options.merge(options)
|
54
54
|
end
|
55
|
-
|
55
|
+
|
56
56
|
# A hash of options for the validates_format_of call for the login field. Allows you to change this however you want.
|
57
57
|
#
|
58
58
|
# <b>Keep in mind this is ruby. I wanted to keep this as flexible as possible, so you can completely replace the hash or
|
59
59
|
# merge options into it. Checkout the convenience function merge_validates_format_of_login_field_options to merge
|
60
60
|
# options.</b>
|
61
61
|
#
|
62
|
-
# * <tt>Default:</tt> {:with => Authlogic::Regex.login, :message => I18n.t('error_messages.login_invalid', :default => "should use only letters, numbers, spaces, and .-_@ please.")}
|
62
|
+
# * <tt>Default:</tt> {:with => Authlogic::Regex.login, :message => lambda {I18n.t('error_messages.login_invalid', :default => "should use only letters, numbers, spaces, and .-_@ please.")}}
|
63
63
|
# * <tt>Accepts:</tt> Hash of options accepted by validates_format_of
|
64
64
|
def validates_format_of_login_field_options(value = nil)
|
65
65
|
rw_config(:validates_format_of_login_field_options, value, {:with => Authlogic::Regex.login, :message => I18n.t('error_messages.login_invalid', :default => "should use only letters, numbers, spaces, and .-_@ please.")})
|
66
66
|
end
|
67
67
|
alias_method :validates_format_of_login_field_options=, :validates_format_of_login_field_options
|
68
|
-
|
68
|
+
|
69
69
|
# See merge_validates_length_of_login_field_options. The same thing, except for validates_format_of_login_field_options
|
70
70
|
def merge_validates_format_of_login_field_options(options = {})
|
71
71
|
self.validates_format_of_login_field_options = validates_format_of_login_field_options.merge(options)
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
74
|
# A hash of options for the validates_uniqueness_of call for the login field. Allows you to change this however you want.
|
75
75
|
#
|
76
76
|
# <b>Keep in mind this is ruby. I wanted to keep this as flexible as possible, so you can completely replace the hash or
|
@@ -83,18 +83,18 @@ module Authlogic
|
|
83
83
|
rw_config(:validates_uniqueness_of_login_field_options, value, {:case_sensitive => false, :scope => validations_scope, :if => "#{login_field}_changed?".to_sym})
|
84
84
|
end
|
85
85
|
alias_method :validates_uniqueness_of_login_field_options=, :validates_uniqueness_of_login_field_options
|
86
|
-
|
86
|
+
|
87
87
|
# See merge_validates_length_of_login_field_options. The same thing, except for validates_uniqueness_of_login_field_options
|
88
88
|
def merge_validates_uniqueness_of_login_field_options(options = {})
|
89
89
|
self.validates_uniqueness_of_login_field_options = validates_uniqueness_of_login_field_options.merge(options)
|
90
90
|
end
|
91
|
-
|
92
|
-
# This method allows you to find a record with the given login. If you notice, with
|
91
|
+
|
92
|
+
# This method allows you to find a record with the given login. If you notice, with Active Record you have the
|
93
93
|
# validates_uniqueness_of validation function. They give you a :case_sensitive option. I handle this in the same
|
94
94
|
# manner that they handle that. If you are using the login field and set false for the :case_sensitive option in
|
95
95
|
# validates_uniqueness_of_login_field_options this method will modify the query to look something like:
|
96
96
|
#
|
97
|
-
#
|
97
|
+
# where("LOWER(#{quoted_table_name}.#{login_field}) = ?", login.downcase).first
|
98
98
|
#
|
99
99
|
# If you don't specify this it calls the good old find_by_* method:
|
100
100
|
#
|
@@ -112,17 +112,18 @@ module Authlogic
|
|
112
112
|
find_with_case(email_field, login, validates_uniqueness_of_email_field_options[:case_sensitive] != false)
|
113
113
|
end
|
114
114
|
end
|
115
|
-
|
115
|
+
|
116
116
|
private
|
117
117
|
def find_with_case(field, value, sensitivity = true)
|
118
118
|
if sensitivity
|
119
119
|
send("find_by_#{field}", value)
|
120
120
|
else
|
121
|
-
|
121
|
+
like_word = ::ActiveRecord::Base.connection.adapter_name == "PostgreSQL" ? "ILIKE" : "LIKE"
|
122
|
+
where("#{quoted_table_name}.#{field} #{like_word} ?", value.mb_chars).first
|
122
123
|
end
|
123
124
|
end
|
124
125
|
end
|
125
|
-
|
126
|
+
|
126
127
|
# All methods relating to the login field
|
127
128
|
module Methods
|
128
129
|
# Adds in various validations, modules, etc.
|
@@ -182,7 +182,7 @@ module Authlogic
|
|
182
182
|
klass.define_callbacks *METHODS
|
183
183
|
|
184
184
|
# If Rails 3, support the new callback syntax
|
185
|
-
if klass.singleton_class.method_defined?(:set_callback)
|
185
|
+
if klass.send(klass.respond_to?(:singleton_class) ? :singleton_class : :metaclass).method_defined?(:set_callback)
|
186
186
|
METHODS.each do |method|
|
187
187
|
klass.class_eval <<-"end_eval", __FILE__, __LINE__
|
188
188
|
def self.#{method}(*methods, &block)
|
@@ -277,7 +277,7 @@ module Authlogic
|
|
277
277
|
# Resets the password to a random friendly token and then saves the record.
|
278
278
|
def reset_password!
|
279
279
|
reset_password
|
280
|
-
save_without_session_maintenance(false)
|
280
|
+
save_without_session_maintenance(:validate => false)
|
281
281
|
end
|
282
282
|
alias_method :randomize_password!, :reset_password!
|
283
283
|
|
@@ -314,7 +314,7 @@ module Authlogic
|
|
314
314
|
|
315
315
|
def transition_password(attempted_password)
|
316
316
|
self.password = attempted_password
|
317
|
-
save(false)
|
317
|
+
save(:validate => false)
|
318
318
|
end
|
319
319
|
|
320
320
|
def require_password?
|