devise 4.2.0 → 4.4.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.
Potentially problematic release.
This version of devise might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/.travis.yml +27 -5
- data/CHANGELOG.md +65 -0
- data/CONTRIBUTING.md +68 -28
- data/Gemfile +3 -1
- data/Gemfile.lock +79 -83
- data/ISSUE_TEMPLATE.md +19 -0
- data/MIT-LICENSE +1 -1
- data/README.md +108 -11
- data/Rakefile +1 -0
- data/app/controllers/devise/confirmations_controller.rb +2 -0
- data/app/controllers/devise/omniauth_callbacks_controller.rb +4 -2
- data/app/controllers/devise/passwords_controller.rb +2 -0
- data/app/controllers/devise/registrations_controller.rb +6 -3
- data/app/controllers/devise/sessions_controller.rb +3 -1
- data/app/controllers/devise/unlocks_controller.rb +2 -0
- data/app/controllers/devise_controller.rb +2 -0
- data/app/helpers/devise_helper.rb +2 -0
- data/app/mailers/devise/mailer.rb +6 -0
- data/app/views/devise/confirmations/new.html.erb +1 -1
- data/app/views/devise/mailer/email_changed.html.erb +7 -0
- data/app/views/devise/passwords/new.html.erb +1 -1
- data/app/views/devise/registrations/edit.html.erb +1 -1
- data/app/views/devise/registrations/new.html.erb +1 -1
- data/app/views/devise/sessions/new.html.erb +1 -1
- data/app/views/devise/unlocks/new.html.erb +1 -1
- data/config/locales/en.yml +2 -0
- data/devise.gemspec +3 -1
- data/gemfiles/Gemfile.rails-4.1-stable +3 -1
- data/gemfiles/Gemfile.rails-4.1-stable.lock +67 -70
- data/gemfiles/Gemfile.rails-4.2-stable +3 -1
- data/gemfiles/Gemfile.rails-4.2-stable.lock +69 -73
- data/gemfiles/Gemfile.rails-5.0-stable +33 -0
- data/gemfiles/Gemfile.rails-5.0-stable.lock +192 -0
- data/gemfiles/Gemfile.rails-5.2-rc1 +26 -0
- data/gemfiles/Gemfile.rails-5.2-rc1.lock +201 -0
- data/guides/bug_report_templates/integration_test.rb +2 -0
- data/lib/devise/controllers/helpers.rb +2 -0
- data/lib/devise/controllers/rememberable.rb +2 -0
- data/lib/devise/controllers/scoped_views.rb +2 -0
- data/lib/devise/controllers/sign_in_out.rb +6 -1
- data/lib/devise/controllers/store_location.rb +25 -7
- data/lib/devise/controllers/url_helpers.rb +2 -0
- data/lib/devise/delegator.rb +2 -0
- data/lib/devise/encryptor.rb +2 -0
- data/lib/devise/failure_app.rb +14 -12
- data/lib/devise/hooks/activatable.rb +2 -0
- data/lib/devise/hooks/csrf_cleaner.rb +2 -0
- data/lib/devise/hooks/forgetable.rb +2 -0
- data/lib/devise/hooks/lockable.rb +6 -1
- data/lib/devise/hooks/proxy.rb +2 -0
- data/lib/devise/hooks/rememberable.rb +2 -0
- data/lib/devise/hooks/timeoutable.rb +2 -0
- data/lib/devise/hooks/trackable.rb +2 -0
- data/lib/devise/mailers/helpers.rb +6 -3
- data/lib/devise/mapping.rb +2 -0
- data/lib/devise/models/authenticatable.rb +4 -2
- data/lib/devise/models/confirmable.rb +53 -17
- data/lib/devise/models/database_authenticatable.rb +40 -4
- data/lib/devise/models/lockable.rb +8 -2
- data/lib/devise/models/omniauthable.rb +2 -0
- data/lib/devise/models/recoverable.rb +26 -9
- data/lib/devise/models/registerable.rb +2 -0
- data/lib/devise/models/rememberable.rb +4 -2
- data/lib/devise/models/timeoutable.rb +2 -0
- data/lib/devise/models/trackable.rb +7 -0
- data/lib/devise/models/validatable.rb +10 -3
- data/lib/devise/models.rb +3 -1
- data/lib/devise/modules.rb +2 -0
- data/lib/devise/omniauth/config.rb +2 -0
- data/lib/devise/omniauth/url_helpers.rb +2 -0
- data/lib/devise/omniauth.rb +2 -0
- data/lib/devise/orm/active_record.rb +2 -0
- data/lib/devise/orm/mongoid.rb +2 -0
- data/lib/devise/parameter_filter.rb +2 -0
- data/lib/devise/parameter_sanitizer.rb +2 -0
- data/lib/devise/rails/routes.rb +3 -1
- data/lib/devise/rails/warden_compat.rb +2 -0
- data/lib/devise/rails.rb +3 -5
- data/lib/devise/secret_key_finder.rb +25 -0
- data/lib/devise/strategies/authenticatable.rb +2 -0
- data/lib/devise/strategies/base.rb +2 -0
- data/lib/devise/strategies/database_authenticatable.rb +2 -0
- data/lib/devise/strategies/rememberable.rb +2 -0
- data/lib/devise/test/controller_helpers.rb +4 -1
- data/lib/devise/test/integration_helpers.rb +2 -0
- data/lib/devise/test_helpers.rb +3 -1
- data/lib/devise/time_inflector.rb +2 -0
- data/lib/devise/token_generator.rb +2 -0
- data/lib/devise/version.rb +3 -1
- data/lib/devise.rb +17 -2
- data/lib/generators/active_record/devise_generator.rb +15 -2
- data/lib/generators/active_record/templates/migration.rb +3 -1
- data/lib/generators/active_record/templates/migration_existing.rb +2 -0
- data/lib/generators/devise/controllers_generator.rb +2 -0
- data/lib/generators/devise/devise_generator.rb +4 -2
- data/lib/generators/devise/install_generator.rb +2 -0
- data/lib/generators/devise/orm_helpers.rb +7 -1
- data/lib/generators/devise/views_generator.rb +7 -8
- data/lib/generators/mongoid/devise_generator.rb +2 -0
- data/lib/generators/templates/controllers/confirmations_controller.rb +2 -0
- data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +2 -0
- data/lib/generators/templates/controllers/passwords_controller.rb +2 -0
- data/lib/generators/templates/controllers/registrations_controller.rb +4 -2
- data/lib/generators/templates/controllers/sessions_controller.rb +3 -1
- data/lib/generators/templates/controllers/unlocks_controller.rb +2 -0
- data/lib/generators/templates/devise.rb +10 -1
- data/lib/generators/templates/markerb/email_changed.markerb +7 -0
- data/lib/generators/templates/markerb/password_change.markerb +2 -2
- data/test/controllers/custom_registrations_controller_test.rb +2 -0
- data/test/controllers/custom_strategy_test.rb +2 -0
- data/test/controllers/helper_methods_test.rb +2 -0
- data/test/controllers/helpers_test.rb +5 -3
- data/test/controllers/inherited_controller_i18n_messages_test.rb +2 -0
- data/test/controllers/internal_helpers_test.rb +2 -0
- data/test/controllers/load_hooks_controller_test.rb +2 -0
- data/test/controllers/passwords_controller_test.rb +2 -0
- data/test/controllers/sessions_controller_test.rb +2 -0
- data/test/controllers/url_helpers_test.rb +2 -0
- data/test/delegator_test.rb +2 -0
- data/test/devise_test.rb +2 -0
- data/test/failure_app_test.rb +2 -0
- data/test/generators/active_record_generator_test.rb +47 -0
- data/test/generators/controllers_generator_test.rb +2 -0
- data/test/generators/devise_generator_test.rb +2 -0
- data/test/generators/install_generator_test.rb +2 -0
- data/test/generators/mongoid_generator_test.rb +2 -0
- data/test/generators/views_generator_test.rb +2 -0
- data/test/helpers/devise_helper_test.rb +2 -0
- data/test/integration/authenticatable_test.rb +10 -2
- data/test/integration/confirmable_test.rb +2 -0
- data/test/integration/database_authenticatable_test.rb +2 -0
- data/test/integration/http_authenticatable_test.rb +8 -0
- data/test/integration/lockable_test.rb +5 -3
- data/test/integration/mounted_engine_test.rb +2 -0
- data/test/integration/omniauthable_test.rb +13 -0
- data/test/integration/recoverable_test.rb +2 -0
- data/test/integration/registerable_test.rb +2 -0
- data/test/integration/rememberable_test.rb +9 -1
- data/test/integration/timeoutable_test.rb +2 -0
- data/test/integration/trackable_test.rb +7 -0
- data/test/mailers/confirmation_instructions_test.rb +2 -0
- data/test/mailers/email_changed_test.rb +132 -0
- data/test/mailers/mailer_test.rb +20 -0
- data/test/mailers/reset_password_instructions_test.rb +2 -0
- data/test/mailers/unlock_instructions_test.rb +2 -0
- data/test/mapping_test.rb +2 -0
- data/test/models/authenticatable_test.rb +2 -0
- data/test/models/confirmable_test.rb +30 -0
- data/test/models/database_authenticatable_test.rb +15 -1
- data/test/models/lockable_test.rb +2 -0
- data/test/models/omniauthable_test.rb +2 -0
- data/test/models/recoverable_test.rb +13 -1
- data/test/models/registerable_test.rb +2 -0
- data/test/models/rememberable_test.rb +2 -0
- data/test/models/serializable_test.rb +6 -0
- data/test/models/timeoutable_test.rb +2 -0
- data/test/models/trackable_test.rb +21 -0
- data/test/models/validatable_test.rb +4 -2
- data/test/models_test.rb +2 -0
- data/test/omniauth/config_test.rb +11 -7
- data/test/omniauth/url_helpers_test.rb +2 -0
- data/test/orm/active_record.rb +9 -2
- data/test/orm/mongoid.rb +3 -1
- data/test/parameter_sanitizer_test.rb +2 -0
- data/test/rails_app/app/active_record/admin.rb +2 -0
- data/test/rails_app/app/active_record/shim.rb +2 -0
- data/test/rails_app/app/active_record/user.rb +14 -1
- data/test/rails_app/app/active_record/user_on_engine.rb +2 -0
- data/test/rails_app/app/active_record/user_on_main_app.rb +2 -0
- data/test/rails_app/app/active_record/user_with_validations.rb +12 -0
- data/test/rails_app/app/active_record/user_without_email.rb +2 -0
- data/test/rails_app/app/controllers/admins/sessions_controller.rb +2 -0
- data/test/rails_app/app/controllers/admins_controller.rb +2 -0
- data/test/rails_app/app/controllers/application_controller.rb +2 -0
- data/test/rails_app/app/controllers/application_with_fake_engine.rb +2 -0
- data/test/rails_app/app/controllers/custom/registrations_controller.rb +2 -0
- data/test/rails_app/app/controllers/home_controller.rb +3 -1
- data/test/rails_app/app/controllers/publisher/registrations_controller.rb +2 -0
- data/test/rails_app/app/controllers/publisher/sessions_controller.rb +2 -0
- data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +3 -1
- data/test/rails_app/app/controllers/users_controller.rb +5 -3
- data/test/rails_app/app/helpers/application_helper.rb +2 -0
- data/test/rails_app/app/mailers/users/from_proc_mailer.rb +2 -0
- data/test/rails_app/app/mailers/users/mailer.rb +2 -0
- data/test/rails_app/app/mailers/users/reply_to_mailer.rb +2 -0
- data/test/rails_app/app/mongoid/admin.rb +2 -0
- data/test/rails_app/app/mongoid/shim.rb +2 -0
- data/test/rails_app/app/mongoid/user.rb +11 -0
- data/test/rails_app/app/mongoid/user_on_engine.rb +2 -0
- data/test/rails_app/app/mongoid/user_on_main_app.rb +2 -0
- data/test/rails_app/app/mongoid/user_with_validations.rb +37 -0
- data/test/rails_app/app/mongoid/user_without_email.rb +2 -0
- data/test/rails_app/config/application.rb +6 -2
- data/test/rails_app/config/boot.rb +16 -3
- data/test/rails_app/config/environment.rb +2 -0
- data/test/rails_app/config/environments/development.rb +2 -0
- data/test/rails_app/config/environments/production.rb +2 -0
- data/test/rails_app/config/environments/test.rb +2 -0
- data/test/rails_app/config/initializers/backtrace_silencers.rb +2 -0
- data/test/rails_app/config/initializers/devise.rb +2 -0
- data/test/rails_app/config/initializers/inflections.rb +2 -0
- data/test/rails_app/config/initializers/secret_token.rb +2 -0
- data/test/rails_app/config/initializers/session_store.rb +2 -0
- data/test/rails_app/config/routes.rb +2 -0
- data/test/rails_app/db/migrate/20100401102949_create_tables.rb +2 -0
- data/test/rails_app/db/schema.rb +2 -0
- data/test/rails_app/lib/shared_admin.rb +7 -1
- data/test/rails_app/lib/shared_user.rb +2 -0
- data/test/rails_app/lib/shared_user_without_email.rb +2 -0
- data/test/rails_app/lib/shared_user_without_omniauth.rb +2 -0
- data/test/rails_test.rb +2 -0
- data/test/routes_test.rb +7 -5
- data/test/secret_key_finder_test.rb +97 -0
- data/test/support/action_controller/record_identifier.rb +2 -0
- data/test/support/assertions.rb +2 -0
- data/test/support/helpers.rb +6 -0
- data/test/support/http_method_compatibility.rb +2 -0
- data/test/support/integration.rb +3 -0
- data/test/support/webrat/integrations/rails.rb +2 -0
- data/test/test/controller_helpers_test.rb +16 -1
- data/test/test/integration_helpers_test.rb +2 -0
- data/test/test_helper.rb +2 -0
- data/test/test_models.rb +2 -0
- metadata +23 -5
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
class TrackableTest < ActiveSupport::TestCase
|
@@ -38,4 +40,23 @@ class TrackableTest < ActiveSupport::TestCase
|
|
38
40
|
assert_nil user.last_sign_in_at
|
39
41
|
assert_equal 0, user.sign_in_count
|
40
42
|
end
|
43
|
+
|
44
|
+
test "update_tracked_fields! should not persist invalid records" do
|
45
|
+
user = UserWithValidations.new
|
46
|
+
request = mock
|
47
|
+
request.stubs(:remote_ip).returns("127.0.0.1")
|
48
|
+
|
49
|
+
assert_not user.update_tracked_fields!(request)
|
50
|
+
assert_not user.persisted?
|
51
|
+
end
|
52
|
+
|
53
|
+
test "update_tracked_fields! should not run model validations" do
|
54
|
+
user = User.new
|
55
|
+
request = mock
|
56
|
+
request.stubs(:remote_ip).returns("127.0.0.1")
|
57
|
+
|
58
|
+
user.expects(:after_validation_callback).never
|
59
|
+
|
60
|
+
assert_not user.update_tracked_fields!(request)
|
61
|
+
end
|
41
62
|
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
require 'test_helper'
|
3
5
|
|
4
6
|
class ValidatableTest < ActiveSupport::TestCase
|
@@ -31,7 +33,7 @@ class ValidatableTest < ActiveSupport::TestCase
|
|
31
33
|
|
32
34
|
%w{invalid_email_format 123 $$$ () ☃}.each do |email|
|
33
35
|
user.email = email
|
34
|
-
assert user.invalid?,
|
36
|
+
assert user.invalid?, "should be invalid with email #{email}"
|
35
37
|
assert_equal 'is invalid', user.errors[:email].join
|
36
38
|
end
|
37
39
|
|
@@ -42,7 +44,7 @@ class ValidatableTest < ActiveSupport::TestCase
|
|
42
44
|
test 'should accept valid emails' do
|
43
45
|
%w(a.b.c@example.com test_mail@gmail.com any@any.net email@test.br 123@mail.test 1☃3@mail.test).each do |email|
|
44
46
|
user = new_user(email: email)
|
45
|
-
assert user.valid?,
|
47
|
+
assert user.valid?, "should be valid with email #{email}"
|
46
48
|
assert_blank user.errors[:email]
|
47
49
|
end
|
48
50
|
end
|
data/test/models_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
class OmniAuthConfigTest < ActiveSupport::TestCase
|
@@ -25,19 +27,21 @@ class OmniAuthConfigTest < ActiveSupport::TestCase
|
|
25
27
|
assert_equal OmniAuth::Strategies::Facebook, config.strategy_class
|
26
28
|
end
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
class NamedTestStrategy
|
31
|
+
include OmniAuth::Strategy
|
32
|
+
option :name, :the_one
|
33
|
+
end
|
32
34
|
|
35
|
+
test "finds the strategy in OmniAuth's list by name" do
|
33
36
|
config = Devise::OmniAuth::Config.new :the_one, [{}]
|
34
37
|
assert_equal NamedTestStrategy, config.strategy_class
|
35
38
|
end
|
36
39
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
+
class UnNamedTestStrategy
|
41
|
+
include OmniAuth::Strategy
|
42
|
+
end
|
40
43
|
|
44
|
+
test "finds the strategy in OmniAuth's list by class name" do
|
41
45
|
config = Devise::OmniAuth::Config.new :un_named_test_strategy, [{}]
|
42
46
|
assert_equal UnNamedTestStrategy, config.strategy_class
|
43
47
|
end
|
data/test/orm/active_record.rb
CHANGED
@@ -1,11 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
ActiveRecord::Migration.verbose = false
|
2
4
|
ActiveRecord::Base.logger = Logger.new(nil)
|
3
5
|
ActiveRecord::Base.include_root_in_json = true
|
4
6
|
|
5
|
-
|
7
|
+
migrate_path = File.expand_path("../../rails_app/db/migrate/", __FILE__)
|
8
|
+
if Devise::Test.rails52?
|
9
|
+
ActiveRecord::MigrationContext.new(migrate_path).migrate
|
10
|
+
else
|
11
|
+
ActiveRecord::Migrator.migrate(migrate_path)
|
12
|
+
end
|
6
13
|
|
7
14
|
class ActiveSupport::TestCase
|
8
|
-
if Devise.rails5?
|
15
|
+
if Devise::Test.rails5?
|
9
16
|
self.use_transactional_tests = true
|
10
17
|
else
|
11
18
|
# Let `after_commit` work with transactional fixtures, however this is not needed for Rails 5.
|
data/test/orm/mongoid.rb
CHANGED
@@ -1,7 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'shared_user'
|
2
4
|
|
3
5
|
class User < ActiveRecord::Base
|
4
6
|
include Shim
|
5
7
|
include SharedUser
|
6
|
-
include ActiveModel::Serializers::Xml if Devise.rails5?
|
8
|
+
include ActiveModel::Serializers::Xml if Devise::Test.rails5?
|
9
|
+
|
10
|
+
validates :sign_in_count, presence: true
|
11
|
+
|
12
|
+
cattr_accessor :validations_performed
|
13
|
+
|
14
|
+
after_validation :after_validation_callback
|
15
|
+
|
16
|
+
def after_validation_callback
|
17
|
+
# used to check in our test if the validations were called
|
18
|
+
@@validations_performed = true
|
19
|
+
end
|
7
20
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class HomeController < ApplicationController
|
2
4
|
def index
|
3
5
|
end
|
@@ -20,7 +22,7 @@ class HomeController < ApplicationController
|
|
20
22
|
end
|
21
23
|
|
22
24
|
def unauthenticated
|
23
|
-
if Devise.rails5?
|
25
|
+
if Devise::Test.rails5?
|
24
26
|
render body: "unauthenticated", status: :unauthorized
|
25
27
|
else
|
26
28
|
render text: "unauthenticated", status: :unauthorized
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
2
4
|
def facebook
|
3
5
|
data = request.respond_to?(:get_header) ? request.get_header("omniauth.auth") : request.env["omniauth.auth"]
|
@@ -9,6 +11,6 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
|
9
11
|
user = User.to_adapter.find_first(email: 'user@test.com')
|
10
12
|
user.remember_me = true
|
11
13
|
sign_in user
|
12
|
-
render (Devise.rails5? ? :body : :text) => ""
|
14
|
+
render (Devise::Test.rails5? ? :body : :text) => ""
|
13
15
|
end
|
14
16
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class UsersController < ApplicationController
|
2
4
|
prepend_before_action :current_user, only: :exhibit
|
3
5
|
before_action :authenticate_user!, except: [:accept, :exhibit]
|
@@ -13,7 +15,7 @@ class UsersController < ApplicationController
|
|
13
15
|
end
|
14
16
|
|
15
17
|
def update_form
|
16
|
-
render (Devise.rails5? ? :body : :text) => 'Update'
|
18
|
+
render (Devise::Test.rails5? ? :body : :text) => 'Update'
|
17
19
|
end
|
18
20
|
|
19
21
|
def accept
|
@@ -21,11 +23,11 @@ class UsersController < ApplicationController
|
|
21
23
|
end
|
22
24
|
|
23
25
|
def exhibit
|
24
|
-
render (Devise.rails5? ? :body : :text) => current_user ? "User is authenticated" : "User is not authenticated"
|
26
|
+
render (Devise::Test.rails5? ? :body : :text) => current_user ? "User is authenticated" : "User is not authenticated"
|
25
27
|
end
|
26
28
|
|
27
29
|
def expire
|
28
30
|
user_session['last_request_at'] = 31.minutes.ago.utc
|
29
|
-
render (Devise.rails5? ? :body : :text) => 'User will be expired on next request'
|
31
|
+
render (Devise::Test.rails5? ? :body : :text) => 'User will be expired on next request'
|
30
32
|
end
|
31
33
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'shared_user'
|
2
4
|
|
3
5
|
class User
|
@@ -36,4 +38,13 @@ class User
|
|
36
38
|
field :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
|
37
39
|
field :unlock_token, type: String # Only if unlock strategy is :email or :both
|
38
40
|
field :locked_at, type: Time
|
41
|
+
|
42
|
+
cattr_accessor :validations_performed
|
43
|
+
|
44
|
+
after_validation :after_validation_callback
|
45
|
+
|
46
|
+
def after_validation_callback
|
47
|
+
# used to check in our test if the validations were called
|
48
|
+
@@validations_performed = true
|
49
|
+
end
|
39
50
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "shared_user"
|
4
|
+
|
5
|
+
class UserWithValidations
|
6
|
+
include Mongoid::Document
|
7
|
+
include Shim
|
8
|
+
include SharedUser
|
9
|
+
|
10
|
+
field :username, type: String
|
11
|
+
field :facebook_token, type: String
|
12
|
+
|
13
|
+
## Database authenticatable
|
14
|
+
field :email, type: String, default: ""
|
15
|
+
field :encrypted_password, type: String, default: ""
|
16
|
+
|
17
|
+
## Recoverable
|
18
|
+
field :reset_password_token, type: String
|
19
|
+
field :reset_password_sent_at, type: Time
|
20
|
+
|
21
|
+
## Rememberable
|
22
|
+
field :remember_created_at, type: Time
|
23
|
+
|
24
|
+
## Trackable
|
25
|
+
field :sign_in_count, type: Integer, default: 0
|
26
|
+
field :current_sign_in_at, type: Time
|
27
|
+
field :last_sign_in_at, type: Time
|
28
|
+
field :current_sign_in_ip, type: String
|
29
|
+
field :last_sign_in_ip, type: String
|
30
|
+
|
31
|
+
## Lockable
|
32
|
+
field :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
|
33
|
+
field :unlock_token, type: String # Only if unlock strategy is :email or :both
|
34
|
+
field :locked_at, type: Time
|
35
|
+
|
36
|
+
validates :email, presence: true
|
37
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require File.expand_path('../boot', __FILE__)
|
2
4
|
|
3
5
|
require "action_controller/railtie"
|
@@ -31,8 +33,10 @@ module RailsApp
|
|
31
33
|
# config.assets.enabled = false
|
32
34
|
|
33
35
|
config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
|
34
|
-
|
35
|
-
if DEVISE_ORM == :active_record &&
|
36
|
+
rails_version = Gem::Version.new(Rails.version)
|
37
|
+
if DEVISE_ORM == :active_record &&
|
38
|
+
rails_version >= Gem::Version.new('4.2.0') &&
|
39
|
+
rails_version < Gem::Version.new('5.1.0')
|
36
40
|
config.active_record.raise_in_transactional_callbacks = true
|
37
41
|
end
|
38
42
|
|
@@ -1,11 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
unless defined?(DEVISE_ORM)
|
2
4
|
DEVISE_ORM = (ENV["DEVISE_ORM"] || :active_record).to_sym
|
3
5
|
end
|
4
6
|
|
5
7
|
module Devise
|
6
|
-
|
7
|
-
|
8
|
-
|
8
|
+
module Test
|
9
|
+
# Detection for minor differences between Rails 4 and 5, 5.1, and 5.2 in tests.
|
10
|
+
|
11
|
+
def self.rails52?
|
12
|
+
Rails.version.start_with? '5.2'
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.rails51?
|
16
|
+
Rails.version.start_with? '5.1'
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.rails5?
|
20
|
+
Rails.version.start_with? '5'
|
21
|
+
end
|
9
22
|
end
|
10
23
|
end
|
11
24
|
|
data/test/rails_app/db/schema.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
# This file is auto-generated from the current state of the database. Instead
|
3
5
|
# of editing this file, please use the migrations feature of Active Record to
|
4
6
|
# incrementally modify your database, and then regenerate this schema definition.
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SharedAdmin
|
2
4
|
extend ActiveSupport::Concern
|
3
5
|
|
@@ -8,7 +10,11 @@ module SharedAdmin
|
|
8
10
|
allow_unconfirmed_access_for: 2.weeks, reconfirmable: true
|
9
11
|
|
10
12
|
validates_length_of :reset_password_token, minimum: 3, allow_blank: true
|
11
|
-
|
13
|
+
if Devise::Test.rails51?
|
14
|
+
validates_uniqueness_of :email, allow_blank: true, if: :will_save_change_to_email?
|
15
|
+
else
|
16
|
+
validates_uniqueness_of :email, allow_blank: true, if: :email_changed?
|
17
|
+
end
|
12
18
|
end
|
13
19
|
|
14
20
|
def raw_confirmation_token
|