authlogic 4.4.2 → 5.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. checksums.yaml +5 -5
  2. data/lib/authlogic.rb +4 -28
  3. data/lib/authlogic/acts_as_authentic/base.rb +3 -18
  4. data/lib/authlogic/acts_as_authentic/email.rb +3 -170
  5. data/lib/authlogic/acts_as_authentic/logged_in_status.rb +3 -1
  6. data/lib/authlogic/acts_as_authentic/login.rb +7 -174
  7. data/lib/authlogic/acts_as_authentic/magic_columns.rb +7 -4
  8. data/lib/authlogic/acts_as_authentic/password.rb +54 -253
  9. data/lib/authlogic/acts_as_authentic/perishable_token.rb +8 -5
  10. data/lib/authlogic/acts_as_authentic/persistence_token.rb +10 -4
  11. data/lib/authlogic/acts_as_authentic/queries/case_sensitivity.rb +53 -0
  12. data/lib/authlogic/acts_as_authentic/queries/find_with_case.rb +36 -20
  13. data/lib/authlogic/acts_as_authentic/session_maintenance.rb +8 -6
  14. data/lib/authlogic/acts_as_authentic/single_access_token.rb +10 -8
  15. data/lib/authlogic/config.rb +9 -1
  16. data/lib/authlogic/controller_adapters/abstract_adapter.rb +7 -4
  17. data/lib/authlogic/controller_adapters/rack_adapter.rb +2 -0
  18. data/lib/authlogic/controller_adapters/rails_adapter.rb +19 -19
  19. data/lib/authlogic/controller_adapters/sinatra_adapter.rb +6 -0
  20. data/lib/authlogic/cookie_credentials.rb +63 -0
  21. data/lib/authlogic/crypto_providers.rb +5 -20
  22. data/lib/authlogic/crypto_providers/bcrypt.rb +3 -3
  23. data/lib/authlogic/crypto_providers/md5.rb +3 -6
  24. data/lib/authlogic/crypto_providers/scrypt.rb +2 -0
  25. data/lib/authlogic/crypto_providers/sha1.rb +4 -6
  26. data/lib/authlogic/crypto_providers/sha256.rb +2 -0
  27. data/lib/authlogic/crypto_providers/sha512.rb +6 -5
  28. data/lib/authlogic/i18n.rb +3 -1
  29. data/lib/authlogic/i18n/translator.rb +3 -0
  30. data/lib/authlogic/random.rb +2 -0
  31. data/lib/authlogic/session/base.rb +2087 -39
  32. data/lib/authlogic/session/magic_column/assigns_last_request_at.rb +46 -0
  33. data/lib/authlogic/test_case.rb +4 -0
  34. data/lib/authlogic/test_case/mock_controller.rb +2 -0
  35. data/lib/authlogic/test_case/mock_cookie_jar.rb +7 -0
  36. data/lib/authlogic/test_case/mock_logger.rb +2 -0
  37. data/lib/authlogic/test_case/mock_request.rb +2 -0
  38. data/lib/authlogic/test_case/rails_request_adapter.rb +2 -0
  39. data/lib/authlogic/version.rb +2 -1
  40. metadata +136 -182
  41. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -28
  42. data/.github/ISSUE_TEMPLATE/feature_proposal.md +0 -32
  43. data/.github/triage.md +0 -86
  44. data/.gitignore +0 -15
  45. data/.rubocop.yml +0 -133
  46. data/.rubocop_todo.yml +0 -74
  47. data/.travis.yml +0 -24
  48. data/CHANGELOG.md +0 -326
  49. data/CONTRIBUTING.md +0 -91
  50. data/Gemfile +0 -6
  51. data/LICENSE +0 -20
  52. data/README.md +0 -439
  53. data/Rakefile +0 -21
  54. data/UPGRADING.md +0 -22
  55. data/authlogic.gemspec +0 -40
  56. data/doc/use_normal_rails_validation.md +0 -82
  57. data/gemfiles/Gemfile.rails-4.2.x +0 -6
  58. data/gemfiles/Gemfile.rails-5.1.x +0 -6
  59. data/gemfiles/Gemfile.rails-5.2.x +0 -6
  60. data/lib/authlogic/acts_as_authentic/restful_authentication.rb +0 -106
  61. data/lib/authlogic/acts_as_authentic/validations_scope.rb +0 -35
  62. data/lib/authlogic/authenticates_many/association.rb +0 -50
  63. data/lib/authlogic/authenticates_many/base.rb +0 -81
  64. data/lib/authlogic/crypto_providers/aes256.rb +0 -71
  65. data/lib/authlogic/crypto_providers/wordpress.rb +0 -72
  66. data/lib/authlogic/regex.rb +0 -79
  67. data/lib/authlogic/session/activation.rb +0 -73
  68. data/lib/authlogic/session/active_record_trickery.rb +0 -65
  69. data/lib/authlogic/session/brute_force_protection.rb +0 -127
  70. data/lib/authlogic/session/callbacks.rb +0 -153
  71. data/lib/authlogic/session/cookies.rb +0 -296
  72. data/lib/authlogic/session/existence.rb +0 -103
  73. data/lib/authlogic/session/foundation.rb +0 -105
  74. data/lib/authlogic/session/http_auth.rb +0 -107
  75. data/lib/authlogic/session/id.rb +0 -53
  76. data/lib/authlogic/session/klass.rb +0 -73
  77. data/lib/authlogic/session/magic_columns.rb +0 -119
  78. data/lib/authlogic/session/magic_states.rb +0 -82
  79. data/lib/authlogic/session/params.rb +0 -130
  80. data/lib/authlogic/session/password.rb +0 -318
  81. data/lib/authlogic/session/perishable_token.rb +0 -24
  82. data/lib/authlogic/session/persistence.rb +0 -77
  83. data/lib/authlogic/session/priority_record.rb +0 -38
  84. data/lib/authlogic/session/scopes.rb +0 -138
  85. data/lib/authlogic/session/session.rb +0 -77
  86. data/lib/authlogic/session/timeout.rb +0 -103
  87. data/lib/authlogic/session/unauthorized_record.rb +0 -56
  88. data/lib/authlogic/session/validation.rb +0 -93
  89. data/test/acts_as_authentic_test/base_test.rb +0 -27
  90. data/test/acts_as_authentic_test/email_test.rb +0 -241
  91. data/test/acts_as_authentic_test/logged_in_status_test.rb +0 -64
  92. data/test/acts_as_authentic_test/login_test.rb +0 -153
  93. data/test/acts_as_authentic_test/magic_columns_test.rb +0 -29
  94. data/test/acts_as_authentic_test/password_test.rb +0 -263
  95. data/test/acts_as_authentic_test/perishable_token_test.rb +0 -98
  96. data/test/acts_as_authentic_test/persistence_token_test.rb +0 -62
  97. data/test/acts_as_authentic_test/restful_authentication_test.rb +0 -48
  98. data/test/acts_as_authentic_test/session_maintenance_test.rb +0 -150
  99. data/test/acts_as_authentic_test/single_access_test.rb +0 -46
  100. data/test/adapter_test.rb +0 -23
  101. data/test/authenticates_many_test.rb +0 -33
  102. data/test/config_test.rb +0 -38
  103. data/test/crypto_provider_test/aes256_test.rb +0 -16
  104. data/test/crypto_provider_test/bcrypt_test.rb +0 -16
  105. data/test/crypto_provider_test/scrypt_test.rb +0 -16
  106. data/test/crypto_provider_test/sha1_test.rb +0 -25
  107. data/test/crypto_provider_test/sha256_test.rb +0 -16
  108. data/test/crypto_provider_test/sha512_test.rb +0 -16
  109. data/test/crypto_provider_test/wordpress_test.rb +0 -26
  110. data/test/fixtures/companies.yml +0 -5
  111. data/test/fixtures/employees.yml +0 -17
  112. data/test/fixtures/projects.yml +0 -3
  113. data/test/fixtures/users.yml +0 -41
  114. data/test/i18n/lol.yml +0 -4
  115. data/test/i18n_test.rb +0 -35
  116. data/test/libs/affiliate.rb +0 -9
  117. data/test/libs/company.rb +0 -8
  118. data/test/libs/employee.rb +0 -9
  119. data/test/libs/employee_session.rb +0 -4
  120. data/test/libs/ldaper.rb +0 -5
  121. data/test/libs/project.rb +0 -5
  122. data/test/libs/user.rb +0 -9
  123. data/test/libs/user_session.rb +0 -27
  124. data/test/random_test.rb +0 -15
  125. data/test/session_test/activation_test.rb +0 -45
  126. data/test/session_test/active_record_trickery_test.rb +0 -78
  127. data/test/session_test/brute_force_protection_test.rb +0 -110
  128. data/test/session_test/callbacks_test.rb +0 -42
  129. data/test/session_test/cookies_test.rb +0 -226
  130. data/test/session_test/credentials_test.rb +0 -0
  131. data/test/session_test/existence_test.rb +0 -88
  132. data/test/session_test/foundation_test.rb +0 -24
  133. data/test/session_test/http_auth_test.rb +0 -60
  134. data/test/session_test/id_test.rb +0 -19
  135. data/test/session_test/klass_test.rb +0 -42
  136. data/test/session_test/magic_columns_test.rb +0 -62
  137. data/test/session_test/magic_states_test.rb +0 -60
  138. data/test/session_test/params_test.rb +0 -61
  139. data/test/session_test/password_test.rb +0 -107
  140. data/test/session_test/perishability_test.rb +0 -17
  141. data/test/session_test/persistence_test.rb +0 -35
  142. data/test/session_test/scopes_test.rb +0 -68
  143. data/test/session_test/session_test.rb +0 -80
  144. data/test/session_test/timeout_test.rb +0 -84
  145. data/test/session_test/unauthorized_record_test.rb +0 -15
  146. data/test/session_test/validation_test.rb +0 -25
  147. data/test/test_helper.rb +0 -272
@@ -1,80 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "test_helper"
4
-
5
- module SessionTest
6
- module SessionTest
7
- class ConfigTest < ActiveSupport::TestCase
8
- def test_session_key
9
- UserSession.session_key = "my_session_key"
10
- assert_equal "my_session_key", UserSession.session_key
11
-
12
- UserSession.session_key "user_credentials"
13
- assert_equal "user_credentials", UserSession.session_key
14
- end
15
- end
16
-
17
- class InstanceMethodsTest < ActiveSupport::TestCase
18
- def test_persist_persist_by_session
19
- ben = users(:ben)
20
- set_session_for(ben)
21
- assert session = UserSession.find
22
- assert_equal ben, session.record
23
- assert_equal ben.persistence_token, controller.session["user_credentials"]
24
- end
25
-
26
- def test_persist_persist_by_session_with_session_fixation_attack
27
- ben = users(:ben)
28
- controller.session["user_credentials"] = "neo"
29
- controller.session["user_credentials_id"] = {
30
- select: " *,'neo' AS persistence_token FROM users WHERE id = #{ben.id} limit 1 -- "
31
- }
32
- @user_session = UserSession.find
33
- assert @user_session.blank?
34
- end
35
-
36
- def test_persist_persist_by_session_with_sql_injection_attack
37
- controller.session["user_credentials"] = { select: "ABRA CADABRA" }
38
- controller.session["user_credentials_id"] = nil
39
- assert_nothing_raised do
40
- @user_session = UserSession.find
41
- end
42
- assert @user_session.blank?
43
- end
44
-
45
- def test_persist_persist_by_session_with_token_only
46
- ben = users(:ben)
47
- set_session_for(ben)
48
- controller.session["user_credentials_id"] = nil
49
- session = UserSession.find
50
- assert_equal ben, session.record
51
- assert_equal ben.persistence_token, controller.session["user_credentials"]
52
- end
53
-
54
- def test_after_save_update_session
55
- ben = users(:ben)
56
- session = UserSession.new(ben)
57
- assert controller.session["user_credentials"].blank?
58
- assert session.save
59
- assert_equal ben.persistence_token, controller.session["user_credentials"]
60
- end
61
-
62
- def test_after_destroy_update_session
63
- ben = users(:ben)
64
- set_session_for(ben)
65
- assert_equal ben.persistence_token, controller.session["user_credentials"]
66
- assert session = UserSession.find
67
- assert session.destroy
68
- assert controller.session["user_credentials"].blank?
69
- end
70
-
71
- def test_after_persisting_update_session
72
- ben = users(:ben)
73
- set_cookie_for(ben)
74
- assert controller.session["user_credentials"].blank?
75
- assert UserSession.find
76
- assert_equal ben.persistence_token, controller.session["user_credentials"]
77
- end
78
- end
79
- end
80
- end
@@ -1,84 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "test_helper"
4
-
5
- module SessionTest
6
- module TimeoutTest
7
- class ConfigTest < ActiveSupport::TestCase
8
- def test_logout_on_timeout
9
- UserSession.logout_on_timeout = true
10
- assert UserSession.logout_on_timeout
11
-
12
- UserSession.logout_on_timeout false
13
- refute UserSession.logout_on_timeout
14
- end
15
- end
16
-
17
- class InstanceMethods < ActiveSupport::TestCase
18
- def test_stale_state
19
- UserSession.logout_on_timeout = true
20
- ben = users(:ben)
21
- ben.last_request_at = 3.years.ago
22
- ben.save
23
- set_session_for(ben)
24
-
25
- session = UserSession.new
26
- assert session.persisting?
27
- assert session.stale?
28
- assert_equal ben, session.stale_record
29
- assert_nil session.record
30
- assert_nil controller.session["user_credentials_id"]
31
-
32
- set_session_for(ben)
33
-
34
- ben.last_request_at = Time.now
35
- ben.save
36
-
37
- assert session.persisting?
38
- refute session.stale?
39
- assert_nil session.stale_record
40
-
41
- UserSession.logout_on_timeout = false
42
- end
43
-
44
- def test_should_be_stale_with_expired_remember_date
45
- UserSession.logout_on_timeout = true
46
- UserSession.remember_me = true
47
- UserSession.remember_me_for = 3.months
48
- ben = users(:ben)
49
- assert ben.save
50
- session = UserSession.new(ben)
51
- assert session.save
52
- Timecop.freeze(Time.now + 4.month)
53
- assert session.persisting?
54
- assert session.stale?
55
- UserSession.remember_me = false
56
- end
57
-
58
- def test_should_not_be_stale_with_valid_remember_date
59
- UserSession.logout_on_timeout = true # Default is 10.minutes
60
- UserSession.remember_me = true
61
- UserSession.remember_me_for = 3.months
62
- ben = users(:ben)
63
- assert ben.save
64
- session = UserSession.new(ben)
65
- assert session.save
66
- Timecop.freeze(Time.now + 2.months)
67
- assert session.persisting?
68
- refute session.stale?
69
- UserSession.remember_me = false
70
- end
71
-
72
- def test_successful_login
73
- UserSession.logout_on_timeout = true
74
- ben = users(:ben)
75
- session = UserSession.create(login: ben.login, password: "benrocks")
76
- refute session.new_session?
77
- session = UserSession.find
78
- assert session
79
- assert_equal ben, session.record
80
- UserSession.logout_on_timeout = false
81
- end
82
- end
83
- end
84
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "test_helper"
4
-
5
- module SessionTest
6
- class UnauthorizedRecordTest < ActiveSupport::TestCase
7
- def test_credentials
8
- ben = users(:ben)
9
- session = UserSession.new
10
- session.credentials = [ben]
11
- assert_equal ben, session.unauthorized_record
12
- assert_equal({ unauthorized_record: "<protected>" }, session.credentials)
13
- end
14
- end
15
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "test_helper"
4
-
5
- module SessionTest
6
- class ValidationTest < ActiveSupport::TestCase
7
- def test_errors
8
- session = UserSession.new
9
- assert session.errors.is_a?(Authlogic::Session::Validation::Errors)
10
- end
11
-
12
- def test_valid
13
- session = UserSession.new
14
- refute session.valid?
15
- assert_nil session.record
16
- assert session.errors.count > 0
17
-
18
- ben = users(:ben)
19
- session.unauthorized_record = ben
20
- assert session.valid?
21
- assert_equal ben, session.attempted_record
22
- assert session.errors.empty?
23
- end
24
- end
25
- end
data/test/test_helper.rb DELETED
@@ -1,272 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "byebug"
4
- require "rubygems"
5
- require "minitest/autorun"
6
- require "active_record"
7
- require "active_record/fixtures"
8
- require "timecop"
9
- require "i18n"
10
- require "minitest/reporters"
11
-
12
- Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
13
-
14
- I18n.load_path << File.dirname(__FILE__) + "/i18n/lol.yml"
15
-
16
- # ActiveRecord::Schema.verbose = false
17
- ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
18
- logger = Logger.new(STDOUT)
19
- logger.level = Logger::FATAL
20
- ActiveRecord::Base.logger = logger
21
-
22
- if ActiveRecord::VERSION::STRING < "4.1"
23
- ActiveRecord::Base.configurations = true
24
- end
25
-
26
- if ActiveSupport.respond_to?(:test_order)
27
- ActiveSupport.test_order = :sorted
28
- end
29
-
30
- ActiveRecord::Base.default_timezone = :local
31
- ActiveRecord::Schema.define(version: 1) do
32
- create_table :companies do |t|
33
- t.datetime :created_at
34
- t.datetime :updated_at
35
- t.string :name
36
- t.boolean :active
37
- end
38
-
39
- create_table :projects do |t|
40
- t.datetime :created_at
41
- t.datetime :updated_at
42
- t.string :name
43
- end
44
-
45
- create_table :projects_users, id: false do |t|
46
- t.integer :project_id
47
- t.integer :user_id
48
- end
49
-
50
- create_table :users do |t|
51
- t.datetime :created_at
52
- t.datetime :updated_at
53
- t.integer :lock_version, default: 0
54
- t.integer :company_id
55
- t.string :login
56
- t.string :crypted_password
57
- t.string :password_salt
58
- t.string :persistence_token
59
- t.string :single_access_token
60
- t.string :perishable_token
61
- t.string :email
62
- t.string :first_name
63
- t.string :last_name
64
- t.integer :login_count, default: 0, null: false
65
- t.integer :failed_login_count, default: 0, null: false
66
- t.datetime :last_request_at
67
- t.datetime :current_login_at
68
- t.datetime :last_login_at
69
- t.string :current_login_ip
70
- t.string :last_login_ip
71
- t.boolean :active, default: true
72
- t.boolean :approved, default: true
73
- t.boolean :confirmed, default: true
74
- end
75
-
76
- create_table :employees do |t|
77
- t.datetime :created_at
78
- t.datetime :updated_at
79
- t.integer :company_id
80
- t.string :email
81
- t.string :crypted_password
82
- t.string :password_salt
83
- t.string :persistence_token
84
- t.string :first_name
85
- t.string :last_name
86
- t.integer :login_count, default: 0, null: false
87
- t.datetime :last_request_at
88
- t.datetime :current_login_at
89
- t.datetime :last_login_at
90
- t.string :current_login_ip
91
- t.string :last_login_ip
92
- end
93
-
94
- create_table :affiliates do |t|
95
- t.datetime :created_at
96
- t.datetime :updated_at
97
- t.integer :company_id
98
- t.string :username
99
- t.string :pw_hash
100
- t.string :pw_salt
101
- t.string :persistence_token
102
- end
103
-
104
- create_table :ldapers do |t|
105
- t.datetime :created_at
106
- t.datetime :updated_at
107
- t.string :ldap_login
108
- t.string :persistence_token
109
- end
110
- end
111
-
112
- require "English"
113
- $LOAD_PATH.unshift(File.expand_path("../lib", __dir__))
114
- require "authlogic"
115
- require "authlogic/test_case"
116
-
117
- # Configure SCrypt to be as fast as possible. This is desirable for a test
118
- # suite, and would be the opposite of desirable for production.
119
- Authlogic::CryptoProviders::SCrypt.max_time = 0.001 # 1ms
120
- Authlogic::CryptoProviders::SCrypt.max_mem = 1024 * 1024 # 1MB, the minimum SCrypt allows
121
-
122
- require "libs/project"
123
- require "libs/affiliate"
124
- require "libs/employee"
125
- require "libs/employee_session"
126
- require "libs/ldaper"
127
- require "libs/user"
128
- require "libs/user_session"
129
- require "libs/company"
130
-
131
- # Recent change, 2017-10-23: We had used a 54-letter string here. In the default
132
- # encoding, UTF-8, that's 54 bytes, which is clearly incorrect for an algorithm
133
- # with a 256-bit key, but I guess it worked. With the release of ruby 2.4 (and
134
- # thus openssl gem 2.0), it is more strict, and must be exactly 32 bytes.
135
- Authlogic::CryptoProviders::AES256.key = ::OpenSSL::Random.random_bytes(32)
136
-
137
- module ActiveSupport
138
- class TestCase
139
- include ActiveRecord::TestFixtures
140
- self.fixture_path = File.dirname(__FILE__) + "/fixtures"
141
-
142
- # use_transactional_fixtures= is deprecated and will be removed from Rails 5.1
143
- # (use use_transactional_tests= instead)
144
- if respond_to?(:use_transactional_tests=)
145
- self.use_transactional_tests = false
146
- else
147
- self.use_transactional_fixtures = false
148
- end
149
-
150
- self.use_instantiated_fixtures = false
151
- self.pre_loaded_fixtures = false
152
- fixtures :all
153
- setup :activate_authlogic
154
- setup :config_setup
155
- teardown :config_teardown
156
- teardown { Timecop.return } # for tests that need to freeze the time
157
-
158
- private
159
-
160
- # Many of the tests change Authlogic config for the test models. Some tests
161
- # were not resetting the config after tests, which didn't surface as broken
162
- # tests until Rails 4.1 was added for testing. This ensures that all the
163
- # models start tests with their original config.
164
- def config_setup
165
- [
166
- Project,
167
- Affiliate,
168
- Employee,
169
- EmployeeSession,
170
- Ldaper,
171
- User,
172
- UserSession,
173
- Company
174
- ].each do |model|
175
- unless model.respond_to?(:original_acts_as_authentic_config)
176
- model.class_attribute :original_acts_as_authentic_config
177
- end
178
- model.original_acts_as_authentic_config = model.acts_as_authentic_config
179
- end
180
- end
181
-
182
- def config_teardown
183
- [
184
- Project,
185
- Affiliate,
186
- Employee,
187
- EmployeeSession,
188
- Ldaper,
189
- User,
190
- UserSession,
191
- Company
192
- ].each do |model|
193
- model.acts_as_authentic_config = model.original_acts_as_authentic_config
194
- end
195
- end
196
-
197
- def password_for(user)
198
- case user
199
- when users(:ben)
200
- "benrocks"
201
- when users(:zack)
202
- "zackrocks"
203
- when users(:aaron)
204
- "aaronrocks"
205
- end
206
- end
207
-
208
- def http_basic_auth_for(user = nil)
209
- unless user.blank?
210
- controller.http_user = user.login
211
- controller.http_password = password_for(user)
212
- end
213
- yield
214
- controller.http_user = controller.http_password = controller.realm = nil
215
- end
216
-
217
- def set_cookie_for(user)
218
- controller.cookies["user_credentials"] = {
219
- value: "#{user.persistence_token}::#{user.id}",
220
- expires: nil
221
- }
222
- end
223
-
224
- def unset_cookie
225
- controller.cookies["user_credentials"] = nil
226
- end
227
-
228
- def set_params_for(user)
229
- controller.params["user_credentials"] = user.single_access_token
230
- end
231
-
232
- def unset_params
233
- controller.params["user_credentials"] = nil
234
- end
235
-
236
- def set_request_content_type(type)
237
- controller.request_content_type = type
238
- end
239
-
240
- def unset_request_content_type
241
- controller.request_content_type = nil
242
- end
243
-
244
- def session_credentials_prefix(scope_record)
245
- if scope_record.nil?
246
- ""
247
- else
248
- format(
249
- "%s_%d_",
250
- scope_record.class.model_name.name.underscore,
251
- scope_record.id
252
- )
253
- end
254
- end
255
-
256
- # Sets the session variables that `record` (eg. a `User`) would have after
257
- # logging in.
258
- #
259
- # If `record` belongs to an `authenticates_many` association that uses the
260
- # `scope_cookies` option, then a `scope_record` can be provided.
261
- def set_session_for(record, scope_record = nil)
262
- prefix = session_credentials_prefix(scope_record)
263
- record_class_name = record.class.model_name.name.underscore
264
- controller.session["#{prefix}#{record_class_name}_credentials"] = record.persistence_token
265
- controller.session["#{prefix}#{record_class_name}_credentials_id"] = record.id
266
- end
267
-
268
- def unset_session
269
- controller.session["user_credentials"] = controller.session["user_credentials_id"] = nil
270
- end
271
- end
272
- end