authlogic 3.8.0 → 4.0.0
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.
- checksums.yaml +7 -0
- data/.github/triage.md +87 -0
- data/.gitignore +2 -1
- data/.rubocop.yml +62 -6
- data/.rubocop_todo.yml +51 -267
- data/.travis.yml +4 -26
- data/CHANGELOG.md +226 -2
- data/CONTRIBUTING.md +15 -5
- data/Gemfile +2 -2
- data/README.md +183 -91
- data/Rakefile +1 -1
- data/UPGRADING.md +20 -0
- data/authlogic.gemspec +25 -16
- data/lib/authlogic.rb +45 -45
- data/lib/authlogic/acts_as_authentic/base.rb +18 -11
- data/lib/authlogic/acts_as_authentic/email.rb +32 -28
- data/lib/authlogic/acts_as_authentic/logged_in_status.rb +1 -1
- data/lib/authlogic/acts_as_authentic/login.rb +32 -42
- data/lib/authlogic/acts_as_authentic/magic_columns.rb +6 -6
- data/lib/authlogic/acts_as_authentic/password.rb +53 -31
- data/lib/authlogic/acts_as_authentic/perishable_token.rb +18 -17
- data/lib/authlogic/acts_as_authentic/persistence_token.rb +7 -12
- data/lib/authlogic/acts_as_authentic/queries/find_with_case.rb +64 -0
- data/lib/authlogic/acts_as_authentic/restful_authentication.rb +11 -3
- data/lib/authlogic/acts_as_authentic/session_maintenance.rb +30 -10
- data/lib/authlogic/acts_as_authentic/single_access_token.rb +4 -4
- data/lib/authlogic/authenticates_many/association.rb +3 -3
- data/lib/authlogic/authenticates_many/base.rb +2 -2
- data/lib/authlogic/config.rb +0 -1
- data/lib/authlogic/controller_adapters/abstract_adapter.rb +11 -4
- data/lib/authlogic/controller_adapters/rack_adapter.rb +7 -3
- data/lib/authlogic/controller_adapters/rails_adapter.rb +2 -0
- data/lib/authlogic/crypto_providers/aes256.rb +1 -1
- data/lib/authlogic/crypto_providers/bcrypt.rb +1 -1
- data/lib/authlogic/crypto_providers/scrypt.rb +6 -6
- data/lib/authlogic/crypto_providers/sha1.rb +10 -5
- data/lib/authlogic/crypto_providers/sha256.rb +11 -8
- data/lib/authlogic/crypto_providers/wordpress.rb +2 -2
- data/lib/authlogic/i18n.rb +4 -2
- data/lib/authlogic/random.rb +10 -28
- data/lib/authlogic/regex.rb +11 -8
- data/lib/authlogic/session/activation.rb +6 -3
- data/lib/authlogic/session/active_record_trickery.rb +13 -9
- data/lib/authlogic/session/base.rb +15 -4
- data/lib/authlogic/session/brute_force_protection.rb +14 -7
- data/lib/authlogic/session/callbacks.rb +53 -30
- data/lib/authlogic/session/cookies.rb +57 -16
- data/lib/authlogic/session/existence.rb +21 -11
- data/lib/authlogic/session/foundation.rb +56 -10
- data/lib/authlogic/session/http_auth.rb +15 -8
- data/lib/authlogic/session/klass.rb +7 -5
- data/lib/authlogic/session/magic_columns.rb +24 -11
- data/lib/authlogic/session/magic_states.rb +11 -4
- data/lib/authlogic/session/params.rb +6 -2
- data/lib/authlogic/session/password.rb +46 -73
- data/lib/authlogic/session/persistence.rb +11 -7
- data/lib/authlogic/session/priority_record.rb +7 -4
- data/lib/authlogic/session/scopes.rb +15 -6
- data/lib/authlogic/session/session.rb +20 -10
- data/lib/authlogic/session/timeout.rb +2 -2
- data/lib/authlogic/session/unauthorized_record.rb +1 -1
- data/lib/authlogic/session/validation.rb +1 -1
- data/lib/authlogic/test_case.rb +65 -2
- data/lib/authlogic/test_case/mock_controller.rb +5 -4
- data/lib/authlogic/test_case/mock_cookie_jar.rb +11 -2
- data/lib/authlogic/test_case/mock_request.rb +5 -1
- data/lib/authlogic/test_case/rails_request_adapter.rb +3 -2
- data/lib/authlogic/version.rb +16 -0
- data/test/acts_as_authentic_test/email_test.rb +33 -34
- data/test/acts_as_authentic_test/logged_in_status_test.rb +1 -1
- data/test/acts_as_authentic_test/login_test.rb +73 -78
- data/test/acts_as_authentic_test/password_test.rb +30 -18
- data/test/acts_as_authentic_test/perishable_token_test.rb +9 -3
- data/test/acts_as_authentic_test/persistence_token_test.rb +4 -0
- data/test/acts_as_authentic_test/session_maintenance_test.rb +66 -14
- data/test/adapter_test.rb +21 -0
- data/test/gemfiles/Gemfile.rails-4.2.x +2 -2
- data/test/gemfiles/Gemfile.rails-5.0.x +2 -2
- data/test/gemfiles/Gemfile.rails-master +6 -0
- data/test/i18n_test.rb +1 -1
- data/test/libs/company.rb +2 -2
- data/test/random_test.rb +7 -37
- data/test/session_test/active_record_trickery_test.rb +4 -3
- data/test/session_test/brute_force_protection_test.rb +8 -8
- data/test/session_test/callbacks_test.rb +1 -1
- data/test/session_test/cookies_test.rb +27 -4
- data/test/session_test/existence_test.rb +15 -4
- data/test/session_test/foundation_test.rb +16 -0
- data/test/session_test/http_auth_test.rb +3 -1
- data/test/session_test/magic_columns_test.rb +10 -12
- data/test/session_test/params_test.rb +4 -1
- data/test/session_test/password_test.rb +7 -7
- data/test/session_test/persistence_test.rb +1 -0
- data/test/session_test/scopes_test.rb +7 -7
- data/test/session_test/session_test.rb +2 -2
- data/test/session_test/timeout_test.rb +1 -1
- data/test/session_test/unauthorized_record_test.rb +1 -1
- data/test/test_helper.rb +111 -103
- metadata +68 -64
- data/test/gemfiles/Gemfile.rails-3.2.x +0 -7
- data/test/gemfiles/Gemfile.rails-4.0.x +0 -7
- data/test/gemfiles/Gemfile.rails-4.1.x +0 -7
@@ -2,7 +2,7 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module ActsAsAuthenticTest
|
4
4
|
class LoggedInStatusTest < ActiveSupport::TestCase
|
5
|
-
ERROR_MSG = 'Multiple calls to %s should result in different relations'
|
5
|
+
ERROR_MSG = 'Multiple calls to %s should result in different relations'.freeze
|
6
6
|
|
7
7
|
def test_logged_in_timeout_config
|
8
8
|
assert_equal 10.minutes.to_i, User.logged_in_timeout
|
@@ -1,44 +1,43 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
module ActsAsAuthenticTest
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
User.validate_login_field = false
|
20
|
-
refute User.validate_login_field
|
21
|
-
User.validate_login_field true
|
22
|
-
assert User.validate_login_field
|
4
|
+
# Tests for configuration option: `validates_format_of_login_field_options`
|
5
|
+
class ValidatesFormatOfLoginTest < ActiveSupport::TestCase
|
6
|
+
def test_invalid_format
|
7
|
+
[
|
8
|
+
"fdsf@^&*",
|
9
|
+
" space",
|
10
|
+
".dot",
|
11
|
+
"-hyphen",
|
12
|
+
"@atmark",
|
13
|
+
"+plus"
|
14
|
+
].each do |login|
|
15
|
+
u = User.new(login: login)
|
16
|
+
refute u.valid?
|
17
|
+
refute u.errors[:login].empty?
|
18
|
+
end
|
23
19
|
end
|
24
20
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
21
|
+
def test_valid_format
|
22
|
+
[
|
23
|
+
"fdsfdsfdsfdsfs",
|
24
|
+
"dakota.dux+1@gmail.com",
|
25
|
+
"marks .-_@+",
|
26
|
+
"_underscore"
|
27
|
+
].each do |login|
|
28
|
+
u = User.new(login: login)
|
29
|
+
refute u.valid?
|
30
|
+
assert u.errors[:login].empty?
|
31
|
+
end
|
33
32
|
end
|
34
33
|
|
35
34
|
def test_validates_format_of_login_field_options_config
|
36
35
|
default = {
|
37
|
-
:
|
38
|
-
:
|
36
|
+
with: /\A[a-zA-Z0-9_][a-zA-Z0-9\.+\-_@ ]+\z/,
|
37
|
+
message: proc do
|
39
38
|
I18n.t(
|
40
39
|
'error_messages.login_invalid',
|
41
|
-
:
|
40
|
+
default: "should use only letters, numbers, spaces, and .-_@+ please."
|
42
41
|
)
|
43
42
|
end
|
44
43
|
}
|
@@ -56,18 +55,57 @@ module ActsAsAuthenticTest
|
|
56
55
|
assert_equal default_message, message.call
|
57
56
|
assert_equal default, options
|
58
57
|
|
59
|
-
User.validates_format_of_login_field_options = { :
|
60
|
-
assert_equal({ :
|
58
|
+
User.validates_format_of_login_field_options = { yes: "no" }
|
59
|
+
assert_equal({ yes: "no" }, User.validates_format_of_login_field_options)
|
61
60
|
User.validates_format_of_login_field_options default
|
62
61
|
assert_equal default, User.validates_format_of_login_field_options
|
63
62
|
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Miscellaneous tests for configuration options related to the `login_field`.
|
66
|
+
# Feel free to organize these into separate `TestCase`s as we have done above
|
67
|
+
# with `ValidatesFormatOfLoginTest`.
|
68
|
+
class MiscellaneousLoginTest < ActiveSupport::TestCase
|
69
|
+
def test_login_field_config
|
70
|
+
assert_equal :login, User.login_field
|
71
|
+
assert_nil Employee.login_field
|
72
|
+
|
73
|
+
User.login_field = :nope
|
74
|
+
assert_equal :nope, User.login_field
|
75
|
+
User.login_field :login
|
76
|
+
assert_equal :login, User.login_field
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_validate_login_field_config
|
80
|
+
assert User.validate_login_field
|
81
|
+
assert Employee.validate_login_field
|
82
|
+
|
83
|
+
User.validate_login_field = false
|
84
|
+
refute User.validate_login_field
|
85
|
+
User.validate_login_field true
|
86
|
+
assert User.validate_login_field
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_validates_length_of_login_field_options_config
|
90
|
+
assert_equal({ within: 3..100 }, User.validates_length_of_login_field_options)
|
91
|
+
assert_equal({ within: 3..100 }, Employee.validates_length_of_login_field_options)
|
92
|
+
|
93
|
+
User.validates_length_of_login_field_options = { yes: "no" }
|
94
|
+
assert_equal({ yes: "no" }, User.validates_length_of_login_field_options)
|
95
|
+
User.validates_length_of_login_field_options(within: 3..100)
|
96
|
+
assert_equal({ within: 3..100 }, User.validates_length_of_login_field_options)
|
97
|
+
end
|
64
98
|
|
65
99
|
def test_validates_uniqueness_of_login_field_options_config
|
66
|
-
default = {
|
100
|
+
default = {
|
101
|
+
case_sensitive: false,
|
102
|
+
scope: User.validations_scope,
|
103
|
+
if: "#{User.login_field}_changed?".to_sym
|
104
|
+
}
|
67
105
|
assert_equal default, User.validates_uniqueness_of_login_field_options
|
68
106
|
|
69
|
-
User.validates_uniqueness_of_login_field_options = { :
|
70
|
-
assert_equal({ :
|
107
|
+
User.validates_uniqueness_of_login_field_options = { yes: "no" }
|
108
|
+
assert_equal({ yes: "no" }, User.validates_uniqueness_of_login_field_options)
|
71
109
|
User.validates_uniqueness_of_login_field_options default
|
72
110
|
assert_equal default, User.validates_uniqueness_of_login_field_options
|
73
111
|
end
|
@@ -83,49 +121,6 @@ module ActsAsAuthenticTest
|
|
83
121
|
assert u.errors[:login].empty?
|
84
122
|
end
|
85
123
|
|
86
|
-
def test_validates_format_of_login_field
|
87
|
-
u = User.new
|
88
|
-
u.login = "fdsf@^&*"
|
89
|
-
refute u.valid?
|
90
|
-
refute u.errors[:login].empty?
|
91
|
-
|
92
|
-
u.login = "fdsfdsfdsfdsfs"
|
93
|
-
refute u.valid?
|
94
|
-
assert u.errors[:login].empty?
|
95
|
-
|
96
|
-
u.login = "dakota.dux+1@gmail.com"
|
97
|
-
refute u.valid?
|
98
|
-
assert u.errors[:login].empty?
|
99
|
-
|
100
|
-
u.login = "marks .-_@+"
|
101
|
-
refute u.valid?
|
102
|
-
assert u.errors[:login].empty?
|
103
|
-
|
104
|
-
u.login = " space"
|
105
|
-
refute u.valid?
|
106
|
-
refute u.errors[:login].empty?
|
107
|
-
|
108
|
-
u.login = ".dot"
|
109
|
-
refute u.valid?
|
110
|
-
refute u.errors[:login].empty?
|
111
|
-
|
112
|
-
u.login = "-hyphen"
|
113
|
-
refute u.valid?
|
114
|
-
refute u.errors[:login].empty?
|
115
|
-
|
116
|
-
u.login = "_underscore"
|
117
|
-
refute u.valid?
|
118
|
-
assert u.errors[:login].empty?
|
119
|
-
|
120
|
-
u.login = "@atmark"
|
121
|
-
refute u.valid?
|
122
|
-
refute u.errors[:login].empty?
|
123
|
-
|
124
|
-
u.login = "+plus"
|
125
|
-
refute u.valid?
|
126
|
-
refute u.errors[:login].empty?
|
127
|
-
end
|
128
|
-
|
129
124
|
def test_validates_uniqueness_of_login_field
|
130
125
|
u = User.new
|
131
126
|
u.login = "bjohnson"
|
@@ -2,7 +2,9 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module ActsAsAuthenticTest
|
4
4
|
class PasswordTest < ActiveSupport::TestCase
|
5
|
-
|
5
|
+
# If test_human_name is executed after test_i18n_of_human_name the test will fail.
|
6
|
+
i_suck_and_my_tests_are_order_dependent!
|
7
|
+
|
6
8
|
def test_crypted_password_field_config
|
7
9
|
assert_equal :crypted_password, User.crypted_password_field
|
8
10
|
assert_equal :crypted_password, Employee.crypted_password_field
|
@@ -52,34 +54,34 @@ module ActsAsAuthenticTest
|
|
52
54
|
end
|
53
55
|
|
54
56
|
def test_validates_length_of_password_field_options_config
|
55
|
-
default = { :
|
57
|
+
default = { minimum: 8, if: :require_password? }
|
56
58
|
assert_equal default, User.validates_length_of_password_field_options
|
57
59
|
assert_equal default, Employee.validates_length_of_password_field_options
|
58
60
|
|
59
|
-
User.validates_length_of_password_field_options = { :
|
60
|
-
assert_equal({ :
|
61
|
+
User.validates_length_of_password_field_options = { yes: "no" }
|
62
|
+
assert_equal({ yes: "no" }, User.validates_length_of_password_field_options)
|
61
63
|
User.validates_length_of_password_field_options default
|
62
64
|
assert_equal default, User.validates_length_of_password_field_options
|
63
65
|
end
|
64
66
|
|
65
67
|
def test_validates_confirmation_of_password_field_options_config
|
66
|
-
default = { :
|
68
|
+
default = { if: :require_password? }
|
67
69
|
assert_equal default, User.validates_confirmation_of_password_field_options
|
68
70
|
assert_equal default, Employee.validates_confirmation_of_password_field_options
|
69
71
|
|
70
|
-
User.validates_confirmation_of_password_field_options = { :
|
71
|
-
assert_equal({ :
|
72
|
+
User.validates_confirmation_of_password_field_options = { yes: "no" }
|
73
|
+
assert_equal({ yes: "no" }, User.validates_confirmation_of_password_field_options)
|
72
74
|
User.validates_confirmation_of_password_field_options default
|
73
75
|
assert_equal default, User.validates_confirmation_of_password_field_options
|
74
76
|
end
|
75
77
|
|
76
78
|
def test_validates_length_of_password_confirmation_field_options_config
|
77
|
-
default = { :
|
79
|
+
default = { minimum: 8, if: :require_password? }
|
78
80
|
assert_equal default, User.validates_length_of_password_confirmation_field_options
|
79
81
|
assert_equal default, Employee.validates_length_of_password_confirmation_field_options
|
80
82
|
|
81
|
-
User.validates_length_of_password_confirmation_field_options = { :
|
82
|
-
assert_equal({ :
|
83
|
+
User.validates_length_of_password_confirmation_field_options = { yes: "no" }
|
84
|
+
assert_equal({ yes: "no" }, User.validates_length_of_password_confirmation_field_options)
|
83
85
|
User.validates_length_of_password_confirmation_field_options default
|
84
86
|
assert_equal default, User.validates_length_of_password_confirmation_field_options
|
85
87
|
end
|
@@ -105,7 +107,12 @@ module ActsAsAuthenticTest
|
|
105
107
|
end
|
106
108
|
|
107
109
|
def test_validates_length_of_password
|
108
|
-
u = User.new(
|
110
|
+
u = User.new(
|
111
|
+
login: "abcde",
|
112
|
+
email: "abcde@test.com",
|
113
|
+
password: "abcdefgh",
|
114
|
+
password_confirmation: "abcdefgh"
|
115
|
+
)
|
109
116
|
assert u.valid?
|
110
117
|
|
111
118
|
u.password = u.password_confirmation = "abcdef"
|
@@ -116,17 +123,18 @@ module ActsAsAuthenticTest
|
|
116
123
|
end
|
117
124
|
|
118
125
|
def test_validates_confirmation_of_password
|
119
|
-
u = User.new(
|
126
|
+
u = User.new(
|
127
|
+
login: "abcde",
|
128
|
+
email: "abcde@test.com",
|
129
|
+
password: "abcdefgh",
|
130
|
+
password_confirmation: "abcdefgh"
|
131
|
+
)
|
120
132
|
assert u.valid?
|
121
133
|
|
122
134
|
u.password_confirmation = "abcdefghij"
|
123
135
|
refute u.valid?
|
124
136
|
|
125
|
-
|
126
|
-
assert u.errors[:password_confirmation].include?("doesn't match Password")
|
127
|
-
else
|
128
|
-
assert u.errors[:password].include?("doesn't match confirmation")
|
129
|
-
end
|
137
|
+
assert u.errors[:password_confirmation].include?("doesn't match Password")
|
130
138
|
end
|
131
139
|
|
132
140
|
def test_validates_length_of_password_confirmation
|
@@ -225,7 +233,11 @@ module ActsAsAuthenticTest
|
|
225
233
|
|
226
234
|
private
|
227
235
|
|
228
|
-
def transition_password_to(
|
236
|
+
def transition_password_to(
|
237
|
+
crypto_provider,
|
238
|
+
records,
|
239
|
+
from_crypto_providers = Authlogic::CryptoProviders::Sha512
|
240
|
+
)
|
229
241
|
records = [records] unless records.is_a?(Array)
|
230
242
|
User.acts_as_authentic do |c|
|
231
243
|
c.crypto_provider = crypto_provider
|
@@ -60,14 +60,18 @@ module ActsAsAuthenticTest
|
|
60
60
|
|
61
61
|
def test_find_using_perishable_token_when_perished
|
62
62
|
ben = users(:ben)
|
63
|
-
ActiveRecord::Base.connection.execute(
|
63
|
+
ActiveRecord::Base.connection.execute(
|
64
|
+
"UPDATE users set updated_at = '#{1.week.ago.to_s(:db)}' where id = #{ben.id}"
|
65
|
+
)
|
64
66
|
assert_nil User.find_using_perishable_token(ben.perishable_token)
|
65
67
|
end
|
66
68
|
|
67
69
|
def test_find_using_perishable_token_when_perished_2
|
68
70
|
User.perishable_token_valid_for = 1.minute
|
69
71
|
ben = users(:ben)
|
70
|
-
ActiveRecord::Base.connection.execute(
|
72
|
+
ActiveRecord::Base.connection.execute(
|
73
|
+
"UPDATE users set updated_at = '#{2.minutes.ago.to_s(:db)}' where id = #{ben.id}"
|
74
|
+
)
|
71
75
|
assert_nil User.find_using_perishable_token(ben.perishable_token)
|
72
76
|
User.perishable_token_valid_for = 10.minutes
|
73
77
|
end
|
@@ -75,7 +79,9 @@ module ActsAsAuthenticTest
|
|
75
79
|
def test_find_using_perishable_token_when_passing_threshold
|
76
80
|
User.perishable_token_valid_for = 1.minute
|
77
81
|
ben = users(:ben)
|
78
|
-
ActiveRecord::Base.connection.execute(
|
82
|
+
ActiveRecord::Base.connection.execute(
|
83
|
+
"UPDATE users set updated_at = '#{10.minutes.ago.to_s(:db)}' where id = #{ben.id}"
|
84
|
+
)
|
79
85
|
assert_nil User.find_using_perishable_token(ben.perishable_token, 5.minutes)
|
80
86
|
assert_equal ben, User.find_using_perishable_token(ben.perishable_token, 20.minutes)
|
81
87
|
User.perishable_token_valid_for = 10.minutes
|
@@ -29,6 +29,8 @@ module ActsAsAuthenticTest
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def test_forget_all
|
32
|
+
UserSession.allow_http_basic_auth = true
|
33
|
+
|
32
34
|
http_basic_auth_for(users(:ben)) { UserSession.find }
|
33
35
|
http_basic_auth_for(users(:zack)) { UserSession.find(:ziggity_zack) }
|
34
36
|
assert UserSession.find
|
@@ -39,6 +41,8 @@ module ActsAsAuthenticTest
|
|
39
41
|
end
|
40
42
|
|
41
43
|
def test_forget
|
44
|
+
UserSession.allow_http_basic_auth = true
|
45
|
+
|
42
46
|
ben = users(:ben)
|
43
47
|
zack = users(:zack)
|
44
48
|
http_basic_auth_for(ben) { UserSession.find }
|
@@ -2,23 +2,59 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module ActsAsAuthenticTest
|
4
4
|
class SessionMaintenanceTest < ActiveSupport::TestCase
|
5
|
-
def
|
6
|
-
|
7
|
-
User.
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
def setup
|
6
|
+
User.log_in_after_create = true
|
7
|
+
User.log_in_after_password_change = true
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_log_in_after_create_config
|
11
|
+
assert User.log_in_after_create
|
12
|
+
User.log_in_after_create = false
|
13
|
+
refute User.log_in_after_create
|
14
|
+
User.log_in_after_create = true
|
15
|
+
assert User.log_in_after_create
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_log_in_after_password_change_config
|
19
|
+
assert User.log_in_after_password_change
|
20
|
+
User.log_in_after_password_change = false
|
21
|
+
refute User.log_in_after_password_change
|
22
|
+
User.log_in_after_password_change = true
|
23
|
+
assert User.log_in_after_password_change
|
11
24
|
end
|
12
25
|
|
13
26
|
def test_login_after_create
|
27
|
+
User.log_in_after_create = true
|
14
28
|
user = User.create(
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
29
|
+
login: "awesome",
|
30
|
+
password: "saweeeet",
|
31
|
+
password_confirmation: "saweeeet",
|
32
|
+
email: "awesome@awesome.com"
|
19
33
|
)
|
20
34
|
assert user.persisted?
|
21
35
|
assert UserSession.find
|
36
|
+
logged_in_user = UserSession.find.user
|
37
|
+
assert_equal logged_in_user, user
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_no_login_after_create
|
41
|
+
old_user = User.create(
|
42
|
+
login: "awesome",
|
43
|
+
password: "saweeeet",
|
44
|
+
password_confirmation: "saweeeet",
|
45
|
+
email: "awesome@awesome.com"
|
46
|
+
)
|
47
|
+
User.log_in_after_create = false
|
48
|
+
user2 = User.create(
|
49
|
+
login: "awesome2",
|
50
|
+
password: "saweeeet2",
|
51
|
+
password_confirmation: "saweeeet2",
|
52
|
+
email: "awesome2@awesome.com"
|
53
|
+
)
|
54
|
+
assert user2.persisted?
|
55
|
+
logged_in_user = UserSession.find.user
|
56
|
+
assert_not_equal logged_in_user, user2
|
57
|
+
assert_equal logged_in_user, old_user
|
22
58
|
end
|
23
59
|
|
24
60
|
def test_updating_session_with_failed_magic_state
|
@@ -30,6 +66,7 @@ module ActsAsAuthenticTest
|
|
30
66
|
end
|
31
67
|
|
32
68
|
def test_update_session_after_password_modify
|
69
|
+
User.log_in_after_password_change = true
|
33
70
|
ben = users(:ben)
|
34
71
|
UserSession.create(ben)
|
35
72
|
old_session_key = controller.session["user_credentials"]
|
@@ -43,6 +80,21 @@ module ActsAsAuthenticTest
|
|
43
80
|
assert_not_equal controller.cookies["user_credentials"], old_cookie_key
|
44
81
|
end
|
45
82
|
|
83
|
+
def test_no_update_session_after_password_modify
|
84
|
+
User.log_in_after_password_change = false
|
85
|
+
ben = users(:ben)
|
86
|
+
UserSession.create(ben)
|
87
|
+
old_session_key = controller.session["user_credentials"]
|
88
|
+
old_cookie_key = controller.cookies["user_credentials"]
|
89
|
+
ben.password = "newpasswd"
|
90
|
+
ben.password_confirmation = "newpasswd"
|
91
|
+
assert ben.save
|
92
|
+
assert controller.session["user_credentials"]
|
93
|
+
assert controller.cookies["user_credentials"]
|
94
|
+
assert_equal controller.session["user_credentials"], old_session_key
|
95
|
+
assert_equal controller.cookies["user_credentials"], old_cookie_key
|
96
|
+
end
|
97
|
+
|
46
98
|
def test_no_session_update_after_modify
|
47
99
|
ben = users(:ben)
|
48
100
|
UserSession.create(ben)
|
@@ -60,10 +112,10 @@ module ActsAsAuthenticTest
|
|
60
112
|
old_session_key = controller.session["user_credentials"]
|
61
113
|
old_cookie_key = controller.cookies["user_credentials"]
|
62
114
|
user = User.create(
|
63
|
-
:
|
64
|
-
:
|
65
|
-
:
|
66
|
-
:
|
115
|
+
login: "awesome",
|
116
|
+
password: "saweet", # Password is too short, user invalid
|
117
|
+
password_confirmation: "saweet",
|
118
|
+
email: "awesome@saweet.com"
|
67
119
|
)
|
68
120
|
refute user.persisted?
|
69
121
|
assert_equal controller.session["user_credentials"], old_session_key
|