authlogic 3.8.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +7 -0
  2. data/.github/triage.md +87 -0
  3. data/.gitignore +2 -1
  4. data/.rubocop.yml +62 -6
  5. data/.rubocop_todo.yml +51 -267
  6. data/.travis.yml +4 -26
  7. data/CHANGELOG.md +226 -2
  8. data/CONTRIBUTING.md +15 -5
  9. data/Gemfile +2 -2
  10. data/README.md +183 -91
  11. data/Rakefile +1 -1
  12. data/UPGRADING.md +20 -0
  13. data/authlogic.gemspec +25 -16
  14. data/lib/authlogic.rb +45 -45
  15. data/lib/authlogic/acts_as_authentic/base.rb +18 -11
  16. data/lib/authlogic/acts_as_authentic/email.rb +32 -28
  17. data/lib/authlogic/acts_as_authentic/logged_in_status.rb +1 -1
  18. data/lib/authlogic/acts_as_authentic/login.rb +32 -42
  19. data/lib/authlogic/acts_as_authentic/magic_columns.rb +6 -6
  20. data/lib/authlogic/acts_as_authentic/password.rb +53 -31
  21. data/lib/authlogic/acts_as_authentic/perishable_token.rb +18 -17
  22. data/lib/authlogic/acts_as_authentic/persistence_token.rb +7 -12
  23. data/lib/authlogic/acts_as_authentic/queries/find_with_case.rb +64 -0
  24. data/lib/authlogic/acts_as_authentic/restful_authentication.rb +11 -3
  25. data/lib/authlogic/acts_as_authentic/session_maintenance.rb +30 -10
  26. data/lib/authlogic/acts_as_authentic/single_access_token.rb +4 -4
  27. data/lib/authlogic/authenticates_many/association.rb +3 -3
  28. data/lib/authlogic/authenticates_many/base.rb +2 -2
  29. data/lib/authlogic/config.rb +0 -1
  30. data/lib/authlogic/controller_adapters/abstract_adapter.rb +11 -4
  31. data/lib/authlogic/controller_adapters/rack_adapter.rb +7 -3
  32. data/lib/authlogic/controller_adapters/rails_adapter.rb +2 -0
  33. data/lib/authlogic/crypto_providers/aes256.rb +1 -1
  34. data/lib/authlogic/crypto_providers/bcrypt.rb +1 -1
  35. data/lib/authlogic/crypto_providers/scrypt.rb +6 -6
  36. data/lib/authlogic/crypto_providers/sha1.rb +10 -5
  37. data/lib/authlogic/crypto_providers/sha256.rb +11 -8
  38. data/lib/authlogic/crypto_providers/wordpress.rb +2 -2
  39. data/lib/authlogic/i18n.rb +4 -2
  40. data/lib/authlogic/random.rb +10 -28
  41. data/lib/authlogic/regex.rb +11 -8
  42. data/lib/authlogic/session/activation.rb +6 -3
  43. data/lib/authlogic/session/active_record_trickery.rb +13 -9
  44. data/lib/authlogic/session/base.rb +15 -4
  45. data/lib/authlogic/session/brute_force_protection.rb +14 -7
  46. data/lib/authlogic/session/callbacks.rb +53 -30
  47. data/lib/authlogic/session/cookies.rb +57 -16
  48. data/lib/authlogic/session/existence.rb +21 -11
  49. data/lib/authlogic/session/foundation.rb +56 -10
  50. data/lib/authlogic/session/http_auth.rb +15 -8
  51. data/lib/authlogic/session/klass.rb +7 -5
  52. data/lib/authlogic/session/magic_columns.rb +24 -11
  53. data/lib/authlogic/session/magic_states.rb +11 -4
  54. data/lib/authlogic/session/params.rb +6 -2
  55. data/lib/authlogic/session/password.rb +46 -73
  56. data/lib/authlogic/session/persistence.rb +11 -7
  57. data/lib/authlogic/session/priority_record.rb +7 -4
  58. data/lib/authlogic/session/scopes.rb +15 -6
  59. data/lib/authlogic/session/session.rb +20 -10
  60. data/lib/authlogic/session/timeout.rb +2 -2
  61. data/lib/authlogic/session/unauthorized_record.rb +1 -1
  62. data/lib/authlogic/session/validation.rb +1 -1
  63. data/lib/authlogic/test_case.rb +65 -2
  64. data/lib/authlogic/test_case/mock_controller.rb +5 -4
  65. data/lib/authlogic/test_case/mock_cookie_jar.rb +11 -2
  66. data/lib/authlogic/test_case/mock_request.rb +5 -1
  67. data/lib/authlogic/test_case/rails_request_adapter.rb +3 -2
  68. data/lib/authlogic/version.rb +16 -0
  69. data/test/acts_as_authentic_test/email_test.rb +33 -34
  70. data/test/acts_as_authentic_test/logged_in_status_test.rb +1 -1
  71. data/test/acts_as_authentic_test/login_test.rb +73 -78
  72. data/test/acts_as_authentic_test/password_test.rb +30 -18
  73. data/test/acts_as_authentic_test/perishable_token_test.rb +9 -3
  74. data/test/acts_as_authentic_test/persistence_token_test.rb +4 -0
  75. data/test/acts_as_authentic_test/session_maintenance_test.rb +66 -14
  76. data/test/adapter_test.rb +21 -0
  77. data/test/gemfiles/Gemfile.rails-4.2.x +2 -2
  78. data/test/gemfiles/Gemfile.rails-5.0.x +2 -2
  79. data/test/gemfiles/Gemfile.rails-master +6 -0
  80. data/test/i18n_test.rb +1 -1
  81. data/test/libs/company.rb +2 -2
  82. data/test/random_test.rb +7 -37
  83. data/test/session_test/active_record_trickery_test.rb +4 -3
  84. data/test/session_test/brute_force_protection_test.rb +8 -8
  85. data/test/session_test/callbacks_test.rb +1 -1
  86. data/test/session_test/cookies_test.rb +27 -4
  87. data/test/session_test/existence_test.rb +15 -4
  88. data/test/session_test/foundation_test.rb +16 -0
  89. data/test/session_test/http_auth_test.rb +3 -1
  90. data/test/session_test/magic_columns_test.rb +10 -12
  91. data/test/session_test/params_test.rb +4 -1
  92. data/test/session_test/password_test.rb +7 -7
  93. data/test/session_test/persistence_test.rb +1 -0
  94. data/test/session_test/scopes_test.rb +7 -7
  95. data/test/session_test/session_test.rb +2 -2
  96. data/test/session_test/timeout_test.rb +1 -1
  97. data/test/session_test/unauthorized_record_test.rb +1 -1
  98. data/test/test_helper.rb +111 -103
  99. metadata +68 -64
  100. data/test/gemfiles/Gemfile.rails-3.2.x +0 -7
  101. data/test/gemfiles/Gemfile.rails-4.0.x +0 -7
  102. data/test/gemfiles/Gemfile.rails-4.1.x +0 -7
@@ -1,17 +1,19 @@
1
1
  module Authlogic
2
2
  module Session
3
- # Handles all authentication that deals with basic HTTP auth. Which is authentication built into the HTTP protocol:
3
+ # Handles all authentication that deals with basic HTTP auth. Which is
4
+ # authentication built into the HTTP protocol:
4
5
  #
5
6
  # http://username:password@whatever.com
6
7
  #
7
- # Also, if you are not comfortable letting users pass their raw username and password you can always use the single
8
- # access token. See Authlogic::Session::Params for more info.
8
+ # Also, if you are not comfortable letting users pass their raw username and
9
+ # password you can always use the single access token. See
10
+ # Authlogic::Session::Params for more info.
9
11
  module HttpAuth
10
12
  def self.included(klass)
11
13
  klass.class_eval do
12
14
  extend Config
13
15
  include InstanceMethods
14
- persist :persist_by_http_auth, :if => :persist_by_http_auth?
16
+ persist :persist_by_http_auth, if: :persist_by_http_auth?
15
17
  end
16
18
  end
17
19
 
@@ -19,13 +21,15 @@ module Authlogic
19
21
  module Config
20
22
  # Do you want to allow your users to log in via HTTP basic auth?
21
23
  #
22
- # I recommend keeping this enabled. The only time I feel this should be disabled is if you are not comfortable
23
- # having your users provide their raw username and password. Whatever the reason, you can disable it here.
24
+ # I recommend keeping this enabled. The only time I feel this should be
25
+ # disabled is if you are not comfortable having your users provide their
26
+ # raw username and password. Whatever the reason, you can disable it
27
+ # here.
24
28
  #
25
29
  # * <tt>Default:</tt> true
26
30
  # * <tt>Accepts:</tt> Boolean
27
31
  def allow_http_basic_auth(value = nil)
28
- rw_config(:allow_http_basic_auth, value, true)
32
+ rw_config(:allow_http_basic_auth, value, false)
29
33
  end
30
34
  alias_method :allow_http_basic_auth=, :allow_http_basic_auth
31
35
 
@@ -83,7 +87,10 @@ module Authlogic
83
87
  end
84
88
 
85
89
  if self.class.request_http_basic_auth
86
- controller.authenticate_or_request_with_http_basic(self.class.http_basic_auth_realm, &login_proc)
90
+ controller.authenticate_or_request_with_http_basic(
91
+ self.class.http_basic_auth_realm,
92
+ &login_proc
93
+ )
87
94
  else
88
95
  controller.authenticate_with_http_basic(&login_proc)
89
96
  end
@@ -16,7 +16,8 @@ module Authlogic
16
16
  module Config
17
17
  # Lets you change which model to use for authentication.
18
18
  #
19
- # * <tt>Default:</tt> inferred from the class name. UserSession would automatically try User
19
+ # * <tt>Default:</tt> inferred from the class name. UserSession would
20
+ # automatically try User
20
21
  # * <tt>Accepts:</tt> an ActiveRecord class
21
22
  def authenticate_with(klass)
22
23
  @klass_name = klass.name
@@ -24,9 +25,10 @@ module Authlogic
24
25
  end
25
26
  alias_method :authenticate_with=, :authenticate_with
26
27
 
27
- # The name of the class that this session is authenticating with. For example, the UserSession class will
28
- # authenticate with the User class unless you specify otherwise in your configuration. See authenticate_with
29
- # for information on how to change this value.
28
+ # The name of the class that this session is authenticating with. For
29
+ # example, the UserSession class will authenticate with the User class
30
+ # unless you specify otherwise in your configuration. See
31
+ # authenticate_with for information on how to change this value.
30
32
  def klass
31
33
  @klass ||= klass_name ? klass_name.constantize : nil
32
34
  end
@@ -48,7 +50,7 @@ module Authlogic
48
50
  #
49
51
  # session.record
50
52
  def initialize(*args)
51
- if !self.class.configured_klass_methods
53
+ unless self.class.configured_klass_methods
52
54
  self.class.send(:alias_method, klass_name.demodulize.underscore.to_sym, :record)
53
55
  self.class.configured_klass_methods = true
54
56
  end
@@ -19,10 +19,10 @@ module Authlogic
19
19
  klass.class_eval do
20
20
  extend Config
21
21
  include InstanceMethods
22
- after_persisting :set_last_request_at, :if => :set_last_request_at?
22
+ after_persisting :set_last_request_at, if: :set_last_request_at?
23
23
  validate :increase_failed_login_count
24
24
  before_save :update_info
25
- before_save :set_last_request_at, :if => :set_last_request_at?
25
+ before_save :set_last_request_at, if: :set_last_request_at?
26
26
  end
27
27
  end
28
28
 
@@ -47,6 +47,12 @@ module Authlogic
47
47
  module InstanceMethods
48
48
  private
49
49
 
50
+ def clear_failed_login_count
51
+ if record.respond_to?(:failed_login_count)
52
+ record.failed_login_count = 0
53
+ end
54
+ end
55
+
50
56
  def increase_failed_login_count
51
57
  if invalid_password? && attempted_record.respond_to?(:failed_login_count)
52
58
  attempted_record.failed_login_count ||= 0
@@ -54,24 +60,31 @@ module Authlogic
54
60
  end
55
61
  end
56
62
 
57
- def update_info
63
+ def increment_login_cout
58
64
  if record.respond_to?(:login_count)
59
65
  record.login_count = (record.login_count.blank? ? 1 : record.login_count + 1)
60
66
  end
67
+ end
61
68
 
62
- if record.respond_to?(:failed_login_count)
63
- record.failed_login_count = 0
69
+ def update_info
70
+ increment_login_cout
71
+ clear_failed_login_count
72
+ update_login_timestamps
73
+ update_login_ip_addresses
74
+ end
75
+
76
+ def update_login_ip_addresses
77
+ if record.respond_to?(:current_login_ip)
78
+ record.last_login_ip = record.current_login_ip if record.respond_to?(:last_login_ip)
79
+ record.current_login_ip = controller.request.ip
64
80
  end
81
+ end
65
82
 
83
+ def update_login_timestamps
66
84
  if record.respond_to?(:current_login_at)
67
85
  record.last_login_at = record.current_login_at if record.respond_to?(:last_login_at)
68
86
  record.current_login_at = klass.default_timezone == :utc ? Time.now.utc : Time.now
69
87
  end
70
-
71
- if record.respond_to?(:current_login_ip)
72
- record.last_login_ip = record.current_login_ip if record.respond_to?(:last_login_ip)
73
- record.current_login_ip = controller.request.ip
74
- end
75
88
  end
76
89
 
77
90
  # This method lets authlogic know whether it should allow the
@@ -92,7 +105,7 @@ module Authlogic
92
105
  # end
93
106
  #
94
107
  # You can do whatever you want with that method.
95
- def set_last_request_at? # :doc:
108
+ def set_last_request_at?
96
109
  if !record || !klass.column_names.include?("last_request_at")
97
110
  return false
98
111
  end
@@ -25,7 +25,7 @@ module Authlogic
25
25
  klass.class_eval do
26
26
  extend Config
27
27
  include InstanceMethods
28
- validate :validate_magic_states, :unless => :disable_magic_states?
28
+ validate :validate_magic_states, unless: :disable_magic_states?
29
29
  end
30
30
  end
31
31
 
@@ -54,15 +54,22 @@ module Authlogic
54
54
  self.class.disable_magic_states == true
55
55
  end
56
56
 
57
+ # @api private
58
+ def required_magic_states_for(record)
59
+ [:active, :approved, :confirmed].select { |state|
60
+ record.respond_to?("#{state}?")
61
+ }
62
+ end
63
+
57
64
  def validate_magic_states
58
65
  return true if attempted_record.nil?
59
- [:active, :approved, :confirmed].each do |required_status|
60
- if attempted_record.respond_to?("#{required_status}?") && !attempted_record.send("#{required_status}?")
66
+ required_magic_states_for(attempted_record).each do |required_status|
67
+ unless attempted_record.send("#{required_status}?")
61
68
  errors.add(
62
69
  :base,
63
70
  I18n.t(
64
71
  "error_messages.not_#{required_status}",
65
- :default => "Your account is not #{required_status}"
72
+ default: "Your account is not #{required_status}"
66
73
  )
67
74
  )
68
75
  return false
@@ -66,7 +66,11 @@ module Authlogic
66
66
  # * <tt>Accepts:</tt> String of a request type, or :all or :any to
67
67
  # allow single access authentication for any and all request types
68
68
  def single_access_allowed_request_types(value = nil)
69
- rw_config(:single_access_allowed_request_types, value, ["application/rss+xml", "application/atom+xml"])
69
+ rw_config(
70
+ :single_access_allowed_request_types,
71
+ value,
72
+ ["application/rss+xml", "application/atom+xml"]
73
+ )
70
74
  end
71
75
  alias_method :single_access_allowed_request_types=, :single_access_allowed_request_types
72
76
  end
@@ -77,7 +81,7 @@ module Authlogic
77
81
  private
78
82
 
79
83
  def persist_by_params
80
- return false if !params_enabled?
84
+ return false unless params_enabled?
81
85
  self.unauthorized_record = search_for_record("find_by_single_access_token", params_credentials)
82
86
  self.single_access = valid?
83
87
  end
@@ -6,7 +6,7 @@ module Authlogic
6
6
  klass.class_eval do
7
7
  extend Config
8
8
  include InstanceMethods
9
- validate :validate_by_password, :if => :authenticating_with_password?
9
+ validate :validate_by_password, if: :authenticating_with_password?
10
10
 
11
11
  class << self
12
12
  attr_accessor :configured_password_methods
@@ -127,42 +127,10 @@ module Authlogic
127
127
  alias_method :verify_password_method=, :verify_password_method
128
128
  end
129
129
 
130
- # Password-related instance methods
130
+ # Password related instance methods
131
131
  module InstanceMethods
132
- E_AC_PARAMETERS = <<-STR.strip_heredoc.freeze
133
- You have passed an ActionController::Parameters to Authlogic 3. That's
134
- OK for now, but in Authlogic 4, it will raise an error. Please
135
- replace:
136
-
137
- UserSession.new(user_session_params)
138
- UserSession.create(user_session_params)
139
-
140
- with
141
-
142
- UserSession.new(user_session_params.to_h)
143
- UserSession.create(user_session_params.to_h)
144
-
145
- And don't forget to `permit`!
146
-
147
- During the transition of rails to Strong Parameters, it has been
148
- common for Authlogic users to forget to `permit` their params. They
149
- would pass their params into Authlogic, we'd call `to_h`, and they'd
150
- be surprised when authentication failed.
151
-
152
- In 2018, people are still making this mistake. We'd like to help them
153
- and make authlogic a little simpler at the same time, so in Authlogic
154
- 3.7.0, we deprecated the use of ActionController::Parameters.
155
-
156
- We discussed this issue thoroughly between late 2016 and early
157
- 2018. Notable discussions include:
158
-
159
- - https://github.com/binarylogic/authlogic/issues/512
160
- - https://github.com/binarylogic/authlogic/pull/558
161
- - https://github.com/binarylogic/authlogic/pull/577
162
- STR
163
-
164
132
  def initialize(*args)
165
- if !self.class.configured_password_methods
133
+ unless self.class.configured_password_methods
166
134
  configure_password_methods
167
135
  self.class.configured_password_methods = true
168
136
  end
@@ -184,14 +152,19 @@ module Authlogic
184
152
 
185
153
  # Accepts the login_field / password_field credentials combination in
186
154
  # hash form.
155
+ #
156
+ # You must pass an actual Hash, `ActionController::Parameters` is
157
+ # specifically not allowed.
158
+ #
159
+ # See `Authlogic::Session::Foundation#credentials=` for an overview of
160
+ # all method signatures.
187
161
  def credentials=(value)
188
162
  super
189
- values = parse_param_val(value) # add strong parameters check
190
-
163
+ values = Array.wrap(value)
191
164
  if values.first.is_a?(Hash)
192
- values.first.with_indifferent_access.slice(login_field, password_field).each do |field, value|
193
- next if value.blank?
194
- send("#{field}=", value)
165
+ values.first.with_indifferent_access.slice(login_field, password_field).each do |field, val|
166
+ next if val.blank?
167
+ send("#{field}=", val)
195
168
  end
196
169
  end
197
170
  end
@@ -202,26 +175,42 @@ module Authlogic
202
175
 
203
176
  private
204
177
 
178
+ def add_invalid_password_error
179
+ if generalize_credentials_error_messages?
180
+ add_general_credentials_error
181
+ else
182
+ errors.add(password_field, I18n.t('error_messages.password_invalid', default: "is not valid"))
183
+ end
184
+ end
185
+
186
+ def add_login_not_found_error
187
+ if generalize_credentials_error_messages?
188
+ add_general_credentials_error
189
+ else
190
+ errors.add(login_field, I18n.t('error_messages.login_not_found', default: "is not valid"))
191
+ end
192
+ end
193
+
205
194
  def configure_password_methods
206
195
  if login_field
207
- self.class.send(:attr_writer, login_field) if !respond_to?("#{login_field}=")
208
- self.class.send(:attr_reader, login_field) if !respond_to?(login_field)
196
+ self.class.send(:attr_writer, login_field) unless respond_to?("#{login_field}=")
197
+ self.class.send(:attr_reader, login_field) unless respond_to?(login_field)
209
198
  end
210
199
 
211
200
  if password_field
212
- self.class.send(:attr_writer, password_field) if !respond_to?("#{password_field}=")
213
- self.class.send(:define_method, password_field) {} if !respond_to?(password_field)
201
+ self.class.send(:attr_writer, password_field) unless respond_to?("#{password_field}=")
202
+ self.class.send(:define_method, password_field) {} unless respond_to?(password_field)
214
203
 
215
204
  # The password should not be accessible publicly. This way forms
216
205
  # using form_for don't fill the password with the attempted
217
206
  # password. To prevent this we just create this method that is
218
207
  # private.
219
- self.class.class_eval <<-"end_eval", __FILE__, __LINE__
208
+ self.class.class_eval <<-EOS, __FILE__, __LINE__
220
209
  private
221
210
  def protected_#{password_field}
222
211
  @#{password_field}
223
212
  end
224
- end_eval
213
+ EOS
225
214
  end
226
215
  end
227
216
 
@@ -234,27 +223,23 @@ module Authlogic
234
223
 
235
224
  # check for blank fields
236
225
  if send(login_field).blank?
237
- errors.add(login_field, I18n.t('error_messages.login_blank', :default => "cannot be blank"))
226
+ errors.add(login_field, I18n.t('error_messages.login_blank', default: "cannot be blank"))
238
227
  end
239
228
  if send("protected_#{password_field}").blank?
240
- errors.add(password_field, I18n.t('error_messages.password_blank', :default => "cannot be blank"))
229
+ errors.add(password_field, I18n.t('error_messages.password_blank', default: "cannot be blank"))
241
230
  end
242
231
  return if errors.count > 0
243
232
 
244
233
  self.attempted_record = search_for_record(find_by_login_method, send(login_field))
245
234
  if attempted_record.blank?
246
- generalize_credentials_error_messages? ?
247
- add_general_credentials_error :
248
- errors.add(login_field, I18n.t('error_messages.login_not_found', :default => "is not valid"))
235
+ add_login_not_found_error
249
236
  return
250
237
  end
251
238
 
252
239
  # check for invalid password
253
- if !attempted_record.send(verify_password_method, send("protected_#{password_field}"))
240
+ unless attempted_record.send(verify_password_method, send("protected_#{password_field}"))
254
241
  self.invalid_password = true
255
- generalize_credentials_error_messages? ?
256
- add_general_credentials_error :
257
- errors.add(password_field, I18n.t('error_messages.password_invalid', :default => "is not valid"))
242
+ add_invalid_password_error
258
243
  return
259
244
  end
260
245
  end
@@ -271,12 +256,12 @@ module Authlogic
271
256
 
272
257
  def add_general_credentials_error
273
258
  error_message =
274
- if self.class.generalize_credentials_error_messages.is_a? String
275
- self.class.generalize_credentials_error_messages
276
- else
277
- "#{login_field.to_s.humanize}/Password combination is not valid"
278
- end
279
- errors.add(:base, I18n.t('error_messages.general_credentials_error', :default => error_message))
259
+ if self.class.generalize_credentials_error_messages.is_a? String
260
+ self.class.generalize_credentials_error_messages
261
+ else
262
+ "#{login_field.to_s.humanize}/Password combination is not valid"
263
+ end
264
+ errors.add(:base, I18n.t('error_messages.general_credentials_error', default: error_message))
280
265
  end
281
266
 
282
267
  def generalize_credentials_error_messages?
@@ -290,18 +275,6 @@ module Authlogic
290
275
  def verify_password_method
291
276
  self.class.verify_password_method
292
277
  end
293
-
294
- # In Rails 5 the ActionController::Parameters no longer inherits from HashWithIndifferentAccess.
295
- # See: http://guides.rubyonrails.org/upgrading_ruby_on_rails.html#actioncontroller-parameters-no-longer-inherits-from-hashwithindifferentaccess
296
- # This method converts the ActionController::Parameters to a Hash
297
- def parse_param_val(value)
298
- if value.first.class.name == "ActionController::Parameters"
299
- ActiveSupport::Deprecation.warn(E_AC_PARAMETERS)
300
- [value.first.to_h]
301
- else
302
- value.is_a?(Array) ? value : [value]
303
- end
304
- end
305
278
  end
306
279
  end
307
280
  end
@@ -34,22 +34,26 @@ module Authlogic
34
34
  #
35
35
  # See the id method for more information on ids.
36
36
  def find(id = nil, priority_record = nil)
37
- session = new({ :priority_record => priority_record }, id)
37
+ session = new({ priority_record: priority_record }, id)
38
38
  session.priority_record = priority_record
39
39
  if session.persisting?
40
40
  session
41
- else
42
- nil
43
41
  end
44
42
  end
45
43
  end
46
44
 
47
45
  module InstanceMethods
48
- # Let's you know if the session is being persisted or not, meaning the user does not have to explicitly log in
49
- # in order to be logged in. If the session has no associated record, it will try to find a record and persist
50
- # the session. This is the method that the class level method find uses to ultimately persist the session.
46
+ # Returns boolean indicating if the session is being persisted or not,
47
+ # meaning the user does not have to explicitly log in in order to be
48
+ # logged in.
49
+ #
50
+ # If the session has no associated record, it will try to find a record
51
+ # and persist the session.
52
+ #
53
+ # This is the method that the class level method find uses to ultimately
54
+ # persist the session.
51
55
  def persisting?
52
- return true if !record.nil?
56
+ return true unless record.nil?
53
57
  self.attempted_record = nil
54
58
  self.remember_me = !cookie_credentials.nil? && !cookie_credentials[2].nil?
55
59
  before_persisting
@@ -1,8 +1,10 @@
1
1
  module Authlogic
2
2
  module Session
3
- # The point of this module is to avoid the StaleObjectError raised when lock_version is implemented in ActiveRecord.
4
- # We accomplish this by using a "priority record". Meaning this record is used if possible, it gets priority.
5
- # This way we don't save a record behind the scenes thus making an object being used stale.
3
+ # The point of this module is to avoid the StaleObjectError raised when
4
+ # lock_version is implemented in ActiveRecord. We accomplish this by using a
5
+ # "priority record". Meaning this record is used if possible, it gets
6
+ # priority. This way we don't save a record behind the scenes thus making an
7
+ # object being used stale.
6
8
  module PriorityRecord
7
9
  def self.included(klass)
8
10
  klass.class_eval do
@@ -10,7 +12,8 @@ module Authlogic
10
12
  end
11
13
  end
12
14
 
13
- # Setting priority record if it is passed. The only way it can be passed is through an array:
15
+ # Setting priority record if it is passed. The only way it can be passed
16
+ # is through an array:
14
17
  #
15
18
  # session.credentials = [real_user_object, priority_user_object]
16
19
  def credentials=(value)