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
data/Rakefile DELETED
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "rubygems"
4
- require "bundler"
5
-
6
- Bundler.setup
7
-
8
- require "rake/testtask"
9
- Rake::TestTask.new(:test) do |test|
10
- test.libs << "test"
11
- test.pattern = "test/**/*_test.rb"
12
- test.verbose = false
13
-
14
- # Set interpreter warning level to 2 (verbose)
15
- test.ruby_opts += ["-W2"]
16
- end
17
-
18
- require "rubocop/rake_task"
19
- RuboCop::RakeTask.new
20
-
21
- task default: %i[rubocop test]
data/UPGRADING.md DELETED
@@ -1,22 +0,0 @@
1
- # Upgrading Authlogic
2
-
3
- Supplemental instructions to complement CHANGELOG.md.
4
-
5
- ## 3.4.0
6
-
7
- In version 3.4.0, released 2014-03-03, the default crypto_provider was changed
8
- from *Sha512* to *SCrypt*.
9
-
10
- If you never set a crypto_provider and are upgrading, your passwords will break
11
- unless you specify `Sha512`.
12
-
13
- ``` ruby
14
- c.crypto_provider = Authlogic::CryptoProviders::Sha512
15
- ```
16
-
17
- And if you want to automatically upgrade from *Sha512* to *SCrypt* as users login:
18
-
19
- ```ruby
20
- c.transition_from_crypto_providers = [Authlogic::CryptoProviders::Sha512]
21
- c.crypto_provider = Authlogic::CryptoProviders::SCrypt
22
- ```
data/authlogic.gemspec DELETED
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "English"
4
- $LOAD_PATH.push File.expand_path("lib", __dir__)
5
- require "authlogic/version"
6
-
7
- ::Gem::Specification.new do |s|
8
- s.name = "authlogic"
9
- s.version = ::Authlogic.gem_version.to_s
10
- s.platform = ::Gem::Platform::RUBY
11
- s.authors = [
12
- "Ben Johnson",
13
- "Tieg Zaharia",
14
- "Jared Beck"
15
- ]
16
- s.email = [
17
- "bjohnson@binarylogic.com",
18
- "tieg.zaharia@gmail.com",
19
- "jared@jaredbeck.com"
20
- ]
21
- s.homepage = "http://github.com/binarylogic/authlogic"
22
- s.summary = "A clean, simple, and unobtrusive ruby authentication solution."
23
- s.license = "MIT"
24
-
25
- s.required_ruby_version = ">= 2.3.0"
26
- s.add_dependency "activerecord", [">= 4.2", "< 5.3"]
27
- s.add_dependency "activesupport", [">= 4.2", "< 5.3"]
28
- s.add_dependency "request_store", "~> 1.0"
29
- s.add_dependency "scrypt", ">= 1.2", "< 4.0"
30
- s.add_development_dependency "bcrypt", "~> 3.1"
31
- s.add_development_dependency "byebug", "~> 10.0"
32
- s.add_development_dependency "minitest-reporters", "~> 1.3"
33
- s.add_development_dependency "rubocop", "~> 0.58.1"
34
- s.add_development_dependency "timecop", "~> 0.7"
35
-
36
- s.files = `git ls-files`.split("\n")
37
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
38
- s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
39
- s.require_paths = ["lib"]
40
- end
@@ -1,82 +0,0 @@
1
- # Use Normal ActiveRecord Validation
2
-
3
- In Authlogic 4.4.0, [we deprecated][1] the features of Authlogic related to
4
- validating email, login, and password. In 5.0.0 these features will be dropped.
5
- Use normal ActiveRecord validations instead.
6
-
7
- ## Instructions
8
-
9
- First, disable the deprecated Authlogic validations:
10
-
11
- acts_as_authentic do |c|
12
- c.validate_email_field = false
13
- c.validate_login_field = false
14
- c.validate_password_field = false
15
- end
16
-
17
- Then, use normal ActiveRecord validations instead. For example, instead of
18
- the Authlogic method validates_length_of_email_field_options, use
19
-
20
- validates :email, length: { ... }
21
-
22
- It might be a good idea to replace these one field at a time, ie. email,
23
- then login, then password; one field per commit.
24
-
25
- ## Default Values
26
-
27
- The following validations represent the Authlogic < 5 defaults. Merge these
28
- defaults with any settings you may have overwritten.
29
-
30
- ```
31
- validates :email,
32
- format: {
33
- with: ::Authlogic::Regex::EMAIL,
34
- message: proc {
35
- ::Authlogic::I18n.t(
36
- "error_messages.email_invalid",
37
- default: "should look like an email address."
38
- )
39
- }
40
- },
41
- length: { maximum: 100 },
42
- uniqueness: {
43
- case_sensitive: false,
44
- if: :email_changed?
45
- }
46
-
47
- validates :login,
48
- format: {
49
- with: ::Authlogic::Regex::LOGIN,
50
- message: proc {
51
- ::Authlogic::I18n.t(
52
- "error_messages.login_invalid",
53
- default: "should use only letters, numbers, spaces, and .-_@+ please."
54
- )
55
- }
56
- },
57
- length: { within: 3..100 },
58
- uniqueness: {
59
- case_sensitive: false,
60
- if: :login_changed?
61
- }
62
-
63
- validates :password,
64
- confirmation: { if: :require_password? },
65
- length: {
66
- minimum: 8,
67
- if: :require_password?
68
- }
69
- validates :password_confirmation,
70
- length: {
71
- minimum: 8,
72
- if: :require_password?
73
- }
74
- ```
75
-
76
- ## Motivation
77
-
78
- The deprecated features save people some time in the begginning, when setting up
79
- Authlogic. But, later in the life of a project, when these settings need to
80
- change, it is obscure compared to normal ActiveRecord validations.
81
-
82
- [1]: https://github.com/binarylogic/authlogic/pull/623
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
- gemspec :path => ".."
3
-
4
- gem "activerecord", "~> 4.2.8.rc1"
5
- gem "activesupport", "~> 4.2.8.rc1"
6
- gem 'sqlite3', :platforms => :ruby
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
- gemspec :path => ".."
3
-
4
- gem "activerecord", "~> 5.1.0"
5
- gem "activesupport", "~> 5.1.0"
6
- gem 'sqlite3', :platforms => :ruby
@@ -1,6 +0,0 @@
1
- source "https://rubygems.org"
2
- gemspec :path => ".."
3
-
4
- gem "activerecord", "~> 5.2.x"
5
- gem "activesupport", "~> 5.2.x"
6
- gem 'sqlite3', :platforms => :ruby
@@ -1,106 +0,0 @@
1
- module Authlogic
2
- module ActsAsAuthentic
3
- # This module is responsible for transitioning existing applications from
4
- # the restful_authentication plugin.
5
- module RestfulAuthentication
6
- def self.included(klass)
7
- klass.class_eval do
8
- extend Config
9
- include InstanceMethods
10
- end
11
- end
12
-
13
- # Configures the restful_authentication aspect of acts_as_authentic.
14
- # These methods become class methods of ::ActiveRecord::Base.
15
- module Config
16
- DPR_MSG = <<~STR.squish
17
- Support for transitioning to authlogic from restful_authentication
18
- (%s) is deprecated without replacement. restful_authentication is no
19
- longer used in the ruby community, and the transition away from it is
20
- complete. There is only one version of restful_authentication on
21
- rubygems.org, it was released in 2009, and it's only compatible with
22
- rails 2.3. It has been nine years since it was released.
23
- STR
24
-
25
- # Switching an existing app to Authlogic from restful_authentication? No
26
- # problem, just set this true and your users won't know anything
27
- # changed. From your database perspective nothing will change at all.
28
- # Authlogic will continue to encrypt passwords just like
29
- # restful_authentication, so your app won't skip a beat. Although, might
30
- # consider transitioning your users to a newer and stronger algorithm.
31
- # Checkout the transition_from_restful_authentication option.
32
- #
33
- # * <tt>Default:</tt> false
34
- # * <tt>Accepts:</tt> Boolean
35
- def act_like_restful_authentication(value = nil)
36
- r = rw_config(:act_like_restful_authentication, value, false)
37
- set_restful_authentication_config if value
38
- r
39
- end
40
-
41
- def act_like_restful_authentication=(value = nil)
42
- ::ActiveSupport::Deprecation.warn(
43
- format(DPR_MSG, "act_like_restful_authentication="),
44
- caller(1)
45
- )
46
- act_like_restful_authentication(value)
47
- end
48
-
49
- # This works just like act_like_restful_authentication except that it
50
- # will start transitioning your users to the algorithm you specify with
51
- # the crypto provider option. The next time they log in it will resave
52
- # their password with the new algorithm and any new record will use the
53
- # new algorithm as well. Make sure to update your users table if you are
54
- # using the default migration since it will set crypted_password and
55
- # salt columns to a maximum width of 40 characters which is not enough.
56
- def transition_from_restful_authentication(value = nil)
57
- r = rw_config(:transition_from_restful_authentication, value, false)
58
- set_restful_authentication_config if value
59
- r
60
- end
61
-
62
- def transition_from_restful_authentication=(value = nil)
63
- ::ActiveSupport::Deprecation.warn(
64
- format(DPR_MSG, "transition_from_restful_authentication="),
65
- caller(1)
66
- )
67
- transition_from_restful_authentication(value)
68
- end
69
-
70
- private
71
-
72
- def set_restful_authentication_config
73
- self.restful_auth_crypto_provider = CryptoProviders::Sha1
74
- if !defined?(::REST_AUTH_SITE_KEY) || ::REST_AUTH_SITE_KEY.nil?
75
- unless defined?(::REST_AUTH_SITE_KEY)
76
- class_eval("::REST_AUTH_SITE_KEY = ''", __FILE__, __LINE__)
77
- end
78
- CryptoProviders::Sha1.stretches = 1
79
- end
80
- end
81
-
82
- # @api private
83
- def restful_auth_crypto_provider=(provider)
84
- if act_like_restful_authentication
85
- self.crypto_provider = provider
86
- else
87
- self.transition_from_crypto_providers = provider
88
- end
89
- end
90
- end
91
-
92
- # :nodoc:
93
- module InstanceMethods
94
- private
95
-
96
- def act_like_restful_authentication?
97
- self.class.act_like_restful_authentication == true
98
- end
99
-
100
- def transition_from_restful_authentication?
101
- self.class.transition_from_restful_authentication == true
102
- end
103
- end
104
- end
105
- end
106
- end
@@ -1,35 +0,0 @@
1
- module Authlogic
2
- module ActsAsAuthentic
3
- # Allows you to scope everything to specific fields. See the Config
4
- # submodule for more info. For information on how to scope off of a parent
5
- # object see Authlogic::AuthenticatesMany
6
- module ValidationsScope
7
- def self.included(klass)
8
- klass.class_eval do
9
- extend Config
10
- end
11
- end
12
-
13
- # All configuration for the scope feature.
14
- module Config
15
- # Allows you to scope everything to specific field(s). Works just like
16
- # validates_uniqueness_of. For example, let's say a user belongs to a
17
- # company, and you want to scope everything to the company:
18
- #
19
- # acts_as_authentic do |c|
20
- # c.validations_scope = :company_id
21
- # end
22
- #
23
- # * <tt>Default:</tt> nil
24
- # * <tt>Accepts:</tt> Symbol or Array of symbols
25
- #
26
- # @deprecated
27
- def validations_scope(value = nil)
28
- deprecate_authlogic_config("validations_scope") if value
29
- rw_config(:validations_scope, value)
30
- end
31
- alias_method :validations_scope=, :validations_scope
32
- end
33
- end
34
- end
35
- end
@@ -1,50 +0,0 @@
1
- module Authlogic
2
- module AuthenticatesMany
3
- # An object of this class is used as a proxy for the authenticates_many
4
- # relationship. It basically allows you to "save" scope details and call
5
- # them on an object, which allows you to do the following:
6
- #
7
- # @account.user_sessions.new
8
- # @account.user_sessions.find
9
- # # ... etc
10
- #
11
- # You can call all of the class level methods off of an object with a saved
12
- # scope, so that calling the above methods scopes the user sessions down to
13
- # that specific account. To implement this via ActiveRecord do something
14
- # like:
15
- #
16
- # class User < ApplicationRecord
17
- # authenticates_many :user_sessions
18
- # end
19
- class Association
20
- attr_accessor :klass, :find_options, :id
21
-
22
- # - id: Usually `nil`, but if the `scope_cookies` option is used, then
23
- # `id` is a string like "company_123". It may seem strange to refer
24
- # to such a string as an "id", but the naming is intentional, and
25
- # is derived from `Authlogic::Session::Id`.
26
- def initialize(klass, find_options, id)
27
- self.klass = klass
28
- self.find_options = find_options
29
- self.id = id
30
- end
31
-
32
- %i[create create! find new].each do |method|
33
- class_eval <<-EOS, __FILE__, __LINE__ + 1
34
- def #{method}(*args)
35
- klass.with_scope(scope_options) do
36
- klass.#{method}(*args)
37
- end
38
- end
39
- EOS
40
- end
41
- alias_method :build, :new
42
-
43
- private
44
-
45
- def scope_options
46
- { find_options: find_options, id: id }
47
- end
48
- end
49
- end
50
- end
@@ -1,81 +0,0 @@
1
- module Authlogic
2
- # This allows you to scope your authentication. For example, let's say all users belong
3
- # to an account, you want to make sure only users that belong to that account can
4
- # actually login into that account. Simple, just do:
5
- #
6
- # class Account < ApplicationRecord
7
- # authenticates_many :user_sessions
8
- # end
9
- #
10
- # Now you can scope sessions just like everything else in ActiveRecord:
11
- #
12
- # @account.user_sessions.new(*args)
13
- # @account.user_sessions.create(*args)
14
- # @account.user_sessions.find(*args)
15
- # # ... etc
16
- #
17
- # Checkout the authenticates_many method for a list of options.
18
- # You may also want to checkout Authlogic::ActsAsAuthentic::Scope to scope your model.
19
- module AuthenticatesMany
20
- # These methods become class methods of ::ActiveRecord::Base.
21
- module Base
22
- DPR_AUTH_MANY = <<~EOS.freeze
23
- authenticates_many is deprecated without replacement. Let us know
24
- if you would like to take over maintenance of this feature as a separate
25
- gem. If no one volunteers to extract and maintain a new gem, then this
26
- feature will simply be deleted.
27
- EOS
28
-
29
- # Allows you to set up a relationship with your sessions. See module
30
- # definition above for more details.
31
- #
32
- # === Options
33
- #
34
- # * <tt>session_class:</tt> default: "#{name}Session",
35
- # This is the related session class.
36
- #
37
- # * <tt>relationship_name:</tt>
38
- # default: options[:session_class].klass_name.underscore.pluralize,
39
- # This is the name of the relationship you want to use to scope
40
- # everything. For example an Account has many Users. There should be a
41
- # relationship called :users that you defined with a has_many. The
42
- # reason we use the relationship is so you don't have to repeat
43
- # yourself. The relationship could have all kinds of custom options. So
44
- # instead of repeating yourself we essentially use the scope that the
45
- # relationship creates.
46
- #
47
- # * <tt>find_options:</tt> default: nil,
48
- # By default the find options are created from the relationship you
49
- # specify with :relationship_name. But if you want to override this and
50
- # manually specify find_options you can do it here. Specify options just
51
- # as you would in ActiveRecord::Base.find.
52
- #
53
- # * <tt>scope_cookies:</tt> default: false
54
- # By the nature of cookies they scope themselves if you are using
55
- # subdomains to access accounts. If you aren't using subdomains you need
56
- # to have separate cookies for each account, assuming a user is logging
57
- # into more than one account. Authlogic can take care of this for you by
58
- # prefixing the name of the cookie and session with the model id.
59
- # Because it affects both cookies names and session keys, the name
60
- # `scope_cookies` is misleading. Perhaps simply `scope` or `scoped`
61
- # would have been better.
62
- def authenticates_many(name, options = {})
63
- ::ActiveSupport::Deprecation.warn(DPR_AUTH_MANY)
64
- options[:session_class] ||= name.to_s.classify.constantize
65
- options[:relationship_name] ||= options[:session_class].klass_name.underscore.pluralize
66
- class_eval <<-EOS, __FILE__, __LINE__ + 1
67
- def #{name}
68
- find_options = #{options[:find_options].inspect} || #{options[:relationship_name]}.where(nil)
69
- @#{name} ||= Authlogic::AuthenticatesMany::Association.new(
70
- #{options[:session_class]},
71
- find_options,
72
- #{options[:scope_cookies] ? "self.class.model_name.name.underscore + '_' + self.send(self.class.primary_key).to_s" : 'nil'}
73
- )
74
- end
75
- EOS
76
- end
77
- end
78
-
79
- ::ActiveRecord::Base.extend(Base) if defined?(::ActiveRecord)
80
- end
81
- end