devise 4.1.1 → 4.8.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 +5 -5
- data/CHANGELOG.md +224 -4
- data/MIT-LICENSE +2 -1
- data/README.md +275 -90
- data/app/controllers/devise/confirmations_controller.rb +2 -0
- data/app/controllers/devise/omniauth_callbacks_controller.rb +7 -5
- data/app/controllers/devise/passwords_controller.rb +3 -0
- data/app/controllers/devise/registrations_controller.rb +34 -13
- data/app/controllers/devise/sessions_controller.rb +3 -1
- data/app/controllers/devise/unlocks_controller.rb +2 -0
- data/app/controllers/devise_controller.rb +5 -3
- data/app/helpers/devise_helper.rb +23 -18
- data/app/mailers/devise/mailer.rb +10 -4
- data/app/views/devise/confirmations/new.html.erb +2 -2
- data/app/views/devise/mailer/email_changed.html.erb +7 -0
- data/app/views/devise/passwords/edit.html.erb +3 -3
- data/app/views/devise/passwords/new.html.erb +2 -2
- data/app/views/devise/registrations/edit.html.erb +9 -5
- data/app/views/devise/registrations/new.html.erb +4 -4
- data/app/views/devise/sessions/new.html.erb +4 -4
- data/app/views/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/devise/shared/_links.html.erb +8 -8
- data/app/views/devise/unlocks/new.html.erb +2 -2
- data/config/locales/en.yml +5 -2
- data/lib/devise.rb +39 -17
- data/lib/devise/controllers/helpers.rb +22 -9
- data/lib/devise/controllers/rememberable.rb +3 -1
- data/lib/devise/controllers/scoped_views.rb +2 -0
- data/lib/devise/controllers/sign_in_out.rb +39 -14
- data/lib/devise/controllers/store_location.rb +25 -7
- data/lib/devise/controllers/url_helpers.rb +3 -1
- data/lib/devise/delegator.rb +2 -0
- data/lib/devise/encryptor.rb +2 -0
- data/lib/devise/failure_app.rb +63 -33
- 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 +4 -2
- data/lib/devise/hooks/proxy.rb +3 -1
- data/lib/devise/hooks/rememberable.rb +2 -0
- data/lib/devise/hooks/timeoutable.rb +4 -2
- data/lib/devise/hooks/trackable.rb +2 -0
- data/lib/devise/mailers/helpers.rb +6 -3
- data/lib/devise/mapping.rb +3 -1
- data/lib/devise/models.rb +3 -1
- data/lib/devise/models/authenticatable.rb +63 -37
- data/lib/devise/models/confirmable.rb +79 -22
- data/lib/devise/models/database_authenticatable.rb +86 -17
- data/lib/devise/models/lockable.rb +17 -3
- data/lib/devise/models/omniauthable.rb +2 -0
- data/lib/devise/models/recoverable.rb +32 -20
- data/lib/devise/models/registerable.rb +4 -0
- data/lib/devise/models/rememberable.rb +5 -3
- data/lib/devise/models/timeoutable.rb +2 -0
- data/lib/devise/models/trackable.rb +15 -1
- data/lib/devise/models/validatable.rb +10 -3
- data/lib/devise/modules.rb +2 -0
- data/lib/devise/omniauth.rb +4 -5
- data/lib/devise/omniauth/config.rb +2 -0
- data/lib/devise/omniauth/url_helpers.rb +2 -51
- data/lib/devise/orm/active_record.rb +5 -1
- data/lib/devise/orm/mongoid.rb +6 -2
- data/lib/devise/parameter_filter.rb +4 -0
- data/lib/devise/parameter_sanitizer.rb +15 -56
- data/lib/devise/rails.rb +6 -6
- data/lib/devise/rails/deprecated_constant_accessor.rb +39 -0
- data/lib/devise/rails/routes.rb +9 -7
- data/lib/devise/rails/warden_compat.rb +2 -0
- data/lib/devise/secret_key_finder.rb +27 -0
- data/lib/devise/strategies/authenticatable.rb +3 -1
- data/lib/devise/strategies/base.rb +2 -0
- data/lib/devise/strategies/database_authenticatable.rb +8 -1
- data/lib/devise/strategies/rememberable.rb +2 -0
- data/lib/devise/test/controller_helpers.rb +167 -0
- data/lib/devise/test/integration_helpers.rb +63 -0
- data/lib/devise/test_helpers.rb +7 -129
- 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/generators/active_record/devise_generator.rb +40 -12
- 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 +3 -1
- data/lib/generators/devise/devise_generator.rb +5 -3
- data/lib/generators/devise/install_generator.rb +3 -5
- data/lib/generators/devise/orm_helpers.rb +9 -3
- data/lib/generators/devise/views_generator.rb +8 -9
- data/lib/generators/mongoid/devise_generator.rb +7 -5
- data/lib/generators/templates/README +9 -8
- data/lib/generators/templates/controllers/confirmations_controller.rb +2 -0
- data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +3 -1
- 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 +49 -6
- data/lib/generators/templates/markerb/email_changed.markerb +7 -0
- data/lib/generators/templates/markerb/password_change.markerb +2 -2
- data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +5 -1
- data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +10 -2
- data/lib/generators/templates/simple_form_for/passwords/new.html.erb +4 -1
- data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +11 -3
- data/lib/generators/templates/simple_form_for/registrations/new.html.erb +11 -3
- data/lib/generators/templates/simple_form_for/sessions/new.html.erb +7 -2
- data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +4 -1
- metadata +16 -297
- data/.gitignore +0 -10
- data/.travis.yml +0 -44
- data/.yardopts +0 -9
- data/CODE_OF_CONDUCT.md +0 -22
- data/CONTRIBUTING.md +0 -16
- data/Gemfile +0 -30
- data/Gemfile.lock +0 -182
- data/Rakefile +0 -36
- data/bin/test +0 -13
- data/devise.gemspec +0 -26
- data/devise.png +0 -0
- data/gemfiles/Gemfile.rails-4.1-stable +0 -30
- data/gemfiles/Gemfile.rails-4.1-stable.lock +0 -170
- data/gemfiles/Gemfile.rails-4.2-stable +0 -30
- data/gemfiles/Gemfile.rails-4.2-stable.lock +0 -192
- data/gemfiles/Gemfile.rails-5.0-beta +0 -37
- data/gemfiles/Gemfile.rails-5.0-beta.lock +0 -199
- data/test/controllers/custom_registrations_controller_test.rb +0 -40
- data/test/controllers/custom_strategy_test.rb +0 -64
- data/test/controllers/helper_methods_test.rb +0 -22
- data/test/controllers/helpers_test.rb +0 -316
- data/test/controllers/inherited_controller_i18n_messages_test.rb +0 -51
- data/test/controllers/internal_helpers_test.rb +0 -127
- data/test/controllers/load_hooks_controller_test.rb +0 -19
- data/test/controllers/passwords_controller_test.rb +0 -32
- data/test/controllers/sessions_controller_test.rb +0 -106
- data/test/controllers/url_helpers_test.rb +0 -65
- data/test/delegator_test.rb +0 -19
- data/test/devise_test.rb +0 -107
- data/test/failure_app_test.rb +0 -320
- data/test/generators/active_record_generator_test.rb +0 -83
- data/test/generators/controllers_generator_test.rb +0 -48
- data/test/generators/devise_generator_test.rb +0 -39
- data/test/generators/install_generator_test.rb +0 -24
- data/test/generators/mongoid_generator_test.rb +0 -23
- data/test/generators/views_generator_test.rb +0 -103
- data/test/helpers/devise_helper_test.rb +0 -49
- data/test/integration/authenticatable_test.rb +0 -698
- data/test/integration/confirmable_test.rb +0 -324
- data/test/integration/database_authenticatable_test.rb +0 -95
- data/test/integration/http_authenticatable_test.rb +0 -106
- data/test/integration/lockable_test.rb +0 -240
- data/test/integration/omniauthable_test.rb +0 -135
- data/test/integration/recoverable_test.rb +0 -347
- data/test/integration/registerable_test.rb +0 -357
- data/test/integration/rememberable_test.rb +0 -211
- data/test/integration/timeoutable_test.rb +0 -184
- data/test/integration/trackable_test.rb +0 -92
- data/test/mailers/confirmation_instructions_test.rb +0 -115
- data/test/mailers/reset_password_instructions_test.rb +0 -96
- data/test/mailers/unlock_instructions_test.rb +0 -91
- data/test/mapping_test.rb +0 -134
- data/test/models/authenticatable_test.rb +0 -23
- data/test/models/confirmable_test.rb +0 -511
- data/test/models/database_authenticatable_test.rb +0 -269
- data/test/models/lockable_test.rb +0 -350
- data/test/models/omniauthable_test.rb +0 -7
- data/test/models/recoverable_test.rb +0 -251
- data/test/models/registerable_test.rb +0 -7
- data/test/models/rememberable_test.rb +0 -169
- data/test/models/serializable_test.rb +0 -49
- data/test/models/timeoutable_test.rb +0 -51
- data/test/models/trackable_test.rb +0 -41
- data/test/models/validatable_test.rb +0 -119
- data/test/models_test.rb +0 -153
- data/test/omniauth/config_test.rb +0 -57
- data/test/omniauth/url_helpers_test.rb +0 -51
- data/test/orm/active_record.rb +0 -17
- data/test/orm/mongoid.rb +0 -13
- data/test/parameter_sanitizer_test.rb +0 -131
- data/test/rails_app/Rakefile +0 -6
- data/test/rails_app/app/active_record/admin.rb +0 -6
- data/test/rails_app/app/active_record/shim.rb +0 -2
- data/test/rails_app/app/active_record/user.rb +0 -7
- data/test/rails_app/app/active_record/user_on_engine.rb +0 -7
- data/test/rails_app/app/active_record/user_on_main_app.rb +0 -7
- data/test/rails_app/app/active_record/user_without_email.rb +0 -8
- data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -6
- data/test/rails_app/app/controllers/admins_controller.rb +0 -6
- data/test/rails_app/app/controllers/application_controller.rb +0 -11
- data/test/rails_app/app/controllers/application_with_fake_engine.rb +0 -30
- data/test/rails_app/app/controllers/custom/registrations_controller.rb +0 -31
- data/test/rails_app/app/controllers/home_controller.rb +0 -29
- data/test/rails_app/app/controllers/publisher/registrations_controller.rb +0 -2
- data/test/rails_app/app/controllers/publisher/sessions_controller.rb +0 -2
- data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +0 -14
- data/test/rails_app/app/controllers/users_controller.rb +0 -31
- data/test/rails_app/app/helpers/application_helper.rb +0 -3
- data/test/rails_app/app/mailers/users/from_proc_mailer.rb +0 -3
- data/test/rails_app/app/mailers/users/mailer.rb +0 -3
- data/test/rails_app/app/mailers/users/reply_to_mailer.rb +0 -4
- data/test/rails_app/app/mongoid/admin.rb +0 -29
- data/test/rails_app/app/mongoid/shim.rb +0 -23
- data/test/rails_app/app/mongoid/user.rb +0 -39
- data/test/rails_app/app/mongoid/user_on_engine.rb +0 -39
- data/test/rails_app/app/mongoid/user_on_main_app.rb +0 -39
- data/test/rails_app/app/mongoid/user_without_email.rb +0 -33
- data/test/rails_app/app/views/admins/index.html.erb +0 -1
- data/test/rails_app/app/views/admins/sessions/new.html.erb +0 -2
- data/test/rails_app/app/views/home/admin_dashboard.html.erb +0 -1
- data/test/rails_app/app/views/home/index.html.erb +0 -1
- data/test/rails_app/app/views/home/join.html.erb +0 -1
- data/test/rails_app/app/views/home/private.html.erb +0 -1
- data/test/rails_app/app/views/home/user_dashboard.html.erb +0 -1
- data/test/rails_app/app/views/layouts/application.html.erb +0 -24
- data/test/rails_app/app/views/users/edit_form.html.erb +0 -1
- data/test/rails_app/app/views/users/index.html.erb +0 -1
- data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +0 -1
- data/test/rails_app/app/views/users/sessions/new.html.erb +0 -1
- data/test/rails_app/bin/bundle +0 -3
- data/test/rails_app/bin/rails +0 -4
- data/test/rails_app/bin/rake +0 -4
- data/test/rails_app/config.ru +0 -4
- data/test/rails_app/config/application.rb +0 -44
- data/test/rails_app/config/boot.rb +0 -14
- data/test/rails_app/config/database.yml +0 -18
- data/test/rails_app/config/environment.rb +0 -5
- data/test/rails_app/config/environments/development.rb +0 -30
- data/test/rails_app/config/environments/production.rb +0 -84
- data/test/rails_app/config/environments/test.rb +0 -46
- data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -7
- data/test/rails_app/config/initializers/devise.rb +0 -180
- data/test/rails_app/config/initializers/inflections.rb +0 -2
- data/test/rails_app/config/initializers/secret_token.rb +0 -3
- data/test/rails_app/config/initializers/session_store.rb +0 -1
- data/test/rails_app/config/routes.rb +0 -126
- data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -71
- data/test/rails_app/db/schema.rb +0 -55
- data/test/rails_app/lib/shared_admin.rb +0 -17
- data/test/rails_app/lib/shared_user.rb +0 -30
- data/test/rails_app/lib/shared_user_without_email.rb +0 -26
- data/test/rails_app/lib/shared_user_without_omniauth.rb +0 -13
- data/test/rails_app/public/404.html +0 -26
- data/test/rails_app/public/422.html +0 -26
- data/test/rails_app/public/500.html +0 -26
- data/test/rails_app/public/favicon.ico +0 -0
- data/test/rails_test.rb +0 -9
- data/test/routes_test.rb +0 -279
- data/test/support/action_controller/record_identifier.rb +0 -10
- data/test/support/assertions.rb +0 -39
- data/test/support/helpers.rb +0 -77
- data/test/support/http_method_compatibility.rb +0 -51
- data/test/support/integration.rb +0 -92
- data/test/support/locale/en.yml +0 -8
- data/test/support/mongoid.yml +0 -6
- data/test/support/webrat/integrations/rails.rb +0 -33
- data/test/test_helper.rb +0 -34
- data/test/test_helpers_test.rb +0 -178
- data/test/test_models.rb +0 -33
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Devise
|
|
2
4
|
module Models
|
|
3
5
|
# Registerable is responsible for everything related to registering a new
|
|
@@ -19,6 +21,8 @@ module Devise
|
|
|
19
21
|
def new_with_session(params, session)
|
|
20
22
|
new(params)
|
|
21
23
|
end
|
|
24
|
+
|
|
25
|
+
Devise::Models.config(self, :sign_in_after_change_password)
|
|
22
26
|
end
|
|
23
27
|
end
|
|
24
28
|
end
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'devise/strategies/rememberable'
|
|
2
4
|
require 'devise/hooks/rememberable'
|
|
3
5
|
require 'devise/hooks/forgetable'
|
|
4
6
|
|
|
5
7
|
module Devise
|
|
6
8
|
module Models
|
|
7
|
-
# Rememberable manages generating and clearing token for
|
|
9
|
+
# Rememberable manages generating and clearing token for remembering the user
|
|
8
10
|
# from a saved cookie. Rememberable also has utility methods for dealing
|
|
9
11
|
# with serializing the user into the cookie and back from the cookie, trying
|
|
10
12
|
# to lookup the record based on the saved information.
|
|
@@ -74,7 +76,7 @@ module Devise
|
|
|
74
76
|
elsif respond_to?(:authenticatable_salt) && (salt = authenticatable_salt.presence)
|
|
75
77
|
salt
|
|
76
78
|
else
|
|
77
|
-
raise "
|
|
79
|
+
raise "authenticatable_salt returned nil for the #{self.class.name} model. " \
|
|
78
80
|
"In order to use rememberable, you must ensure a password is always set " \
|
|
79
81
|
"or have a remember_token column in your model or implement your own " \
|
|
80
82
|
"rememberable_value in the model with custom logic."
|
|
@@ -100,7 +102,7 @@ module Devise
|
|
|
100
102
|
|
|
101
103
|
def remember_me?(token, generated_at)
|
|
102
104
|
# TODO: Normalize the JSON type coercion along with the Timeoutable hook
|
|
103
|
-
# in a single place https://github.com/
|
|
105
|
+
# in a single place https://github.com/heartcombo/devise/blob/ffe9d6d406e79108cf32a2c6a1d0b3828849c40b/lib/devise/hooks/timeoutable.rb#L14-L18
|
|
104
106
|
if generated_at.is_a?(String)
|
|
105
107
|
generated_at = time_from_json(generated_at)
|
|
106
108
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'devise/hooks/trackable'
|
|
2
4
|
|
|
3
5
|
module Devise
|
|
@@ -20,7 +22,7 @@ module Devise
|
|
|
20
22
|
self.last_sign_in_at = old_current || new_current
|
|
21
23
|
self.current_sign_in_at = new_current
|
|
22
24
|
|
|
23
|
-
old_current, new_current = self.current_sign_in_ip, request
|
|
25
|
+
old_current, new_current = self.current_sign_in_ip, extract_ip_from(request)
|
|
24
26
|
self.last_sign_in_ip = old_current || new_current
|
|
25
27
|
self.current_sign_in_ip = new_current
|
|
26
28
|
|
|
@@ -29,9 +31,21 @@ module Devise
|
|
|
29
31
|
end
|
|
30
32
|
|
|
31
33
|
def update_tracked_fields!(request)
|
|
34
|
+
# We have to check if the user is already persisted before running
|
|
35
|
+
# `save` here because invalid users can be saved if we don't.
|
|
36
|
+
# See https://github.com/heartcombo/devise/issues/4673 for more details.
|
|
37
|
+
return if new_record?
|
|
38
|
+
|
|
32
39
|
update_tracked_fields(request)
|
|
33
40
|
save(validate: false)
|
|
34
41
|
end
|
|
42
|
+
|
|
43
|
+
protected
|
|
44
|
+
|
|
45
|
+
def extract_ip_from(request)
|
|
46
|
+
request.remote_ip
|
|
47
|
+
end
|
|
48
|
+
|
|
35
49
|
end
|
|
36
50
|
end
|
|
37
51
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Devise
|
|
2
4
|
module Models
|
|
3
5
|
# Validatable creates all needed validations for a user email and password.
|
|
@@ -10,7 +12,7 @@ module Devise
|
|
|
10
12
|
# Validatable adds the following options to devise_for:
|
|
11
13
|
#
|
|
12
14
|
# * +email_regexp+: the regular expression used to validate e-mails;
|
|
13
|
-
# * +password_length+: a range expressing password length. Defaults to
|
|
15
|
+
# * +password_length+: a range expressing password length. Defaults to 6..128.
|
|
14
16
|
#
|
|
15
17
|
module Validatable
|
|
16
18
|
# All validations used by this module.
|
|
@@ -27,8 +29,13 @@ module Devise
|
|
|
27
29
|
|
|
28
30
|
base.class_eval do
|
|
29
31
|
validates_presence_of :email, if: :email_required?
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
if Devise.activerecord51?
|
|
33
|
+
validates_uniqueness_of :email, allow_blank: true, case_sensitive: true, if: :will_save_change_to_email?
|
|
34
|
+
validates_format_of :email, with: email_regexp, allow_blank: true, if: :will_save_change_to_email?
|
|
35
|
+
else
|
|
36
|
+
validates_uniqueness_of :email, allow_blank: true, if: :email_changed?
|
|
37
|
+
validates_format_of :email, with: email_regexp, allow_blank: true, if: :email_changed?
|
|
38
|
+
end
|
|
32
39
|
|
|
33
40
|
validates_presence_of :password, if: :password_required?
|
|
34
41
|
validates_confirmation_of :password, if: :password_required?
|
data/lib/devise/modules.rb
CHANGED
data/lib/devise/omniauth.rb
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
begin
|
|
4
|
+
gem "omniauth", ">= 1.0.0"
|
|
5
|
+
|
|
2
6
|
require "omniauth"
|
|
3
|
-
require "omniauth/version"
|
|
4
7
|
rescue LoadError
|
|
5
8
|
warn "Could not load 'omniauth'. Please ensure you have the omniauth gem >= 1.0.0 installed and listed in your Gemfile."
|
|
6
9
|
raise
|
|
7
10
|
end
|
|
8
11
|
|
|
9
|
-
unless OmniAuth::VERSION =~ /^1\./
|
|
10
|
-
raise "You are using an old OmniAuth version, please ensure you have 1.0.0.pr2 version or later installed."
|
|
11
|
-
end
|
|
12
|
-
|
|
13
12
|
# Clean up the default path_prefix. It will be automatically set by Devise.
|
|
14
13
|
OmniAuth.config.path_prefix = nil
|
|
15
14
|
|
|
@@ -1,57 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Devise
|
|
2
4
|
module OmniAuth
|
|
3
5
|
module UrlHelpers
|
|
4
|
-
def self.define_helpers(mapping)
|
|
5
|
-
return unless mapping.omniauthable?
|
|
6
|
-
|
|
7
|
-
mapping = mapping.name
|
|
8
|
-
|
|
9
|
-
class_eval do
|
|
10
|
-
define_method("#{mapping}_omniauth_authorize_path") do |provider, *args|
|
|
11
|
-
ActiveSupport::Deprecation.warn(<<-DEPRECATION.strip_heredoc)
|
|
12
|
-
[Devise] #{mapping}_omniauth_authorize_path(#{provider.inspect}) is deprecated and it will be removed from Devise 4.2.
|
|
13
|
-
|
|
14
|
-
Please use #{mapping}_#{provider}_omniauth_authorize_path instead.
|
|
15
|
-
DEPRECATION
|
|
16
|
-
send("#{mapping}_#{provider}_omniauth_authorize_path", *args)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
define_method("#{mapping}_omniauth_authorize_url") do |provider, *args|
|
|
20
|
-
ActiveSupport::Deprecation.warn(<<-DEPRECATION.strip_heredoc)
|
|
21
|
-
[Devise] #{mapping}_omniauth_authorize_url(#{provider.inspect}) is deprecated and it will be removed from Devise 4.2.
|
|
22
|
-
|
|
23
|
-
Please use #{mapping}_#{provider}_omniauth_authorize_url instead.
|
|
24
|
-
DEPRECATION
|
|
25
|
-
send("#{mapping}_#{provider}_omniauth_authorize_url", *args)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
define_method("#{mapping}_omniauth_callback_path") do |provider, *args|
|
|
29
|
-
ActiveSupport::Deprecation.warn(<<-DEPRECATION.strip_heredoc)
|
|
30
|
-
[Devise] #{mapping}_omniauth_callback_path(#{provider.inspect}) is deprecated and it will be removed from Devise 4.2.
|
|
31
|
-
|
|
32
|
-
Please use #{mapping}_#{provider}_omniauth_callback_path instead.
|
|
33
|
-
DEPRECATION
|
|
34
|
-
send("#{mapping}_#{provider}_omniauth_callback_path", *args)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
define_method("#{mapping}_omniauth_callback_url") do |provider, *args|
|
|
38
|
-
ActiveSupport::Deprecation.warn(<<-DEPRECATION.strip_heredoc)
|
|
39
|
-
[Devise] #{mapping}_omniauth_callback_url(#{provider.inspect}) is deprecated and it will be removed from Devise 4.2.
|
|
40
|
-
|
|
41
|
-
Please use #{mapping}_#{provider}_omniauth_callback_url instead.
|
|
42
|
-
DEPRECATION
|
|
43
|
-
send("#{mapping}_#{provider}_omniauth_callback_url", *args)
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
ActiveSupport.on_load(:action_controller) do
|
|
48
|
-
if respond_to?(:helper_method)
|
|
49
|
-
helper_method "#{mapping}_omniauth_authorize_path", "#{mapping}_omniauth_authorize_url"
|
|
50
|
-
helper_method "#{mapping}_omniauth_callback_path", "#{mapping}_omniauth_callback_url"
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
6
|
def omniauth_authorize_path(resource_or_scope, provider, *args)
|
|
56
7
|
scope = Devise::Mapping.find_scope!(resource_or_scope)
|
|
57
8
|
_devise_route_context.send("#{scope}_#{provider}_omniauth_authorize_path", *args)
|
data/lib/devise/orm/mongoid.rb
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
ActiveSupport.on_load(:mongoid) do
|
|
4
|
+
require 'orm_adapter/adapters/mongoid'
|
|
5
|
+
|
|
6
|
+
Mongoid::Document::ClassMethods.send :include, Devise::Models
|
|
7
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Devise
|
|
2
4
|
class ParameterFilter
|
|
3
5
|
def initialize(case_insensitive_keys, strip_whitespace_keys)
|
|
@@ -16,6 +18,8 @@ module Devise
|
|
|
16
18
|
|
|
17
19
|
def filtered_hash_by_method_for_given_keys(conditions, method, condition_keys)
|
|
18
20
|
condition_keys.each do |k|
|
|
21
|
+
next unless conditions.key?(k)
|
|
22
|
+
|
|
19
23
|
value = conditions[k]
|
|
20
24
|
conditions[k] = value.send(method) if value.respond_to?(method)
|
|
21
25
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Devise
|
|
2
4
|
# The +ParameterSanitizer+ deals with permitting specific parameters values
|
|
3
5
|
# for each +Devise+ scope in the application.
|
|
@@ -68,12 +70,6 @@ module Devise
|
|
|
68
70
|
def sanitize(action)
|
|
69
71
|
permissions = @permitted[action]
|
|
70
72
|
|
|
71
|
-
# DEPRECATED: Remove this branch on Devise 4.2.
|
|
72
|
-
if respond_to?(action, true)
|
|
73
|
-
deprecate_instance_method_sanitization(action)
|
|
74
|
-
return cast_to_hash send(action)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
73
|
if permissions.respond_to?(:call)
|
|
78
74
|
cast_to_hash permissions.call(default_params)
|
|
79
75
|
elsif permissions.present?
|
|
@@ -127,17 +123,6 @@ module Devise
|
|
|
127
123
|
end
|
|
128
124
|
end
|
|
129
125
|
|
|
130
|
-
# DEPRECATED: Remove this method on Devise 4.2.
|
|
131
|
-
def for(action, &block) # :nodoc:
|
|
132
|
-
if block_given?
|
|
133
|
-
deprecate_for_with_block(action)
|
|
134
|
-
permit(action, &block)
|
|
135
|
-
else
|
|
136
|
-
deprecate_for_without_block(action)
|
|
137
|
-
@permitted[action] or unknown_action!(action)
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
|
-
|
|
141
126
|
private
|
|
142
127
|
|
|
143
128
|
# Cast a sanitized +ActionController::Parameters+ to a +HashWithIndifferentAccess+
|
|
@@ -150,7 +135,19 @@ module Devise
|
|
|
150
135
|
end
|
|
151
136
|
|
|
152
137
|
def default_params
|
|
153
|
-
|
|
138
|
+
if hashable_resource_params?
|
|
139
|
+
@params.fetch(@resource_name)
|
|
140
|
+
else
|
|
141
|
+
empty_params
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def hashable_resource_params?
|
|
146
|
+
@params[@resource_name].respond_to?(:permit)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def empty_params
|
|
150
|
+
ActionController::Parameters.new({})
|
|
154
151
|
end
|
|
155
152
|
|
|
156
153
|
def permit_keys(parameters, keys)
|
|
@@ -172,43 +169,5 @@ module Devise
|
|
|
172
169
|
devise_parameter_sanitizer.permit(:#{action}, keys: [:param1, :param2, :param3])
|
|
173
170
|
MESSAGE
|
|
174
171
|
end
|
|
175
|
-
|
|
176
|
-
def deprecate_for_with_block(action)
|
|
177
|
-
ActiveSupport::Deprecation.warn(<<-MESSAGE.strip_heredoc)
|
|
178
|
-
[Devise] Changing the sanitized parameters through "#{self.class.name}#for(#{action}) is deprecated and it will be removed from Devise 4.2.
|
|
179
|
-
Please use the `permit` method:
|
|
180
|
-
|
|
181
|
-
devise_parameter_sanitizer.permit(:#{action}) do |user|
|
|
182
|
-
# Your block here.
|
|
183
|
-
end
|
|
184
|
-
MESSAGE
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
def deprecate_for_without_block(action)
|
|
188
|
-
ActiveSupport::Deprecation.warn(<<-MESSAGE.strip_heredoc)
|
|
189
|
-
[Devise] Changing the sanitized parameters through "#{self.class.name}#for(#{action}) is deprecated and it will be removed from Devise 4.2.
|
|
190
|
-
Please use the `permit` method to add or remove any key:
|
|
191
|
-
|
|
192
|
-
To add any new key, use the `keys` keyword argument:
|
|
193
|
-
devise_parameter_sanitizer.permit(:#{action}, keys: [:param1, :param2, :param3])
|
|
194
|
-
|
|
195
|
-
To remove any existing key, use the `except` keyword argument:
|
|
196
|
-
devise_parameter_sanitizer.permit(:#{action}, except: [:email])
|
|
197
|
-
MESSAGE
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
def deprecate_instance_method_sanitization(action)
|
|
201
|
-
ActiveSupport::Deprecation.warn(<<-MESSAGE.strip_heredoc)
|
|
202
|
-
[Devise] Parameter sanitization through a "#{self.class.name}##{action}" method is deprecated and it will be removed from Devise 4.2.
|
|
203
|
-
Please use the `permit` method on your sanitizer `initialize` method.
|
|
204
|
-
|
|
205
|
-
class #{self.class.name} < Devise::ParameterSanitizer
|
|
206
|
-
def initialize(*)
|
|
207
|
-
super
|
|
208
|
-
permit(:#{action}, keys: [:param1, :param2, :param3])
|
|
209
|
-
end
|
|
210
|
-
end
|
|
211
|
-
MESSAGE
|
|
212
|
-
end
|
|
213
172
|
end
|
|
214
173
|
end
|
data/lib/devise/rails.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'devise/rails/routes'
|
|
2
4
|
require 'devise/rails/warden_compat'
|
|
3
5
|
|
|
@@ -11,7 +13,9 @@ module Devise
|
|
|
11
13
|
end
|
|
12
14
|
|
|
13
15
|
# Force routes to be loaded if we are doing any eager load.
|
|
14
|
-
config.before_eager_load
|
|
16
|
+
config.before_eager_load do |app|
|
|
17
|
+
app.reload_routes! if Devise.reload_routes
|
|
18
|
+
end
|
|
15
19
|
|
|
16
20
|
initializer "devise.url_helpers" do
|
|
17
21
|
Devise.include_helpers(Devise::Controllers)
|
|
@@ -30,11 +34,7 @@ module Devise
|
|
|
30
34
|
end
|
|
31
35
|
|
|
32
36
|
initializer "devise.secret_key" do |app|
|
|
33
|
-
|
|
34
|
-
Devise.secret_key ||= app.secrets.secret_key_base
|
|
35
|
-
elsif app.config.respond_to?(:secret_key_base)
|
|
36
|
-
Devise.secret_key ||= app.config.secret_key_base
|
|
37
|
-
end
|
|
37
|
+
Devise.secret_key ||= Devise::SecretKeyFinder.new(app).find
|
|
38
38
|
|
|
39
39
|
Devise.token_generator ||=
|
|
40
40
|
if secret_key = Devise.secret_key
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
begin
|
|
4
|
+
require 'active_support/deprecation/constant_accessor'
|
|
5
|
+
|
|
6
|
+
module Devise
|
|
7
|
+
DeprecatedConstantAccessor = ActiveSupport::Deprecation::DeprecatedConstantAccessor #:nodoc:
|
|
8
|
+
end
|
|
9
|
+
rescue LoadError
|
|
10
|
+
|
|
11
|
+
# Copy of constant deprecation module from Rails / Active Support version 6, so we can use it
|
|
12
|
+
# with Rails <= 5.0 versions. This can be removed once we support only Rails 5.1 or greater.
|
|
13
|
+
module Devise
|
|
14
|
+
module DeprecatedConstantAccessor #:nodoc:
|
|
15
|
+
def self.included(base)
|
|
16
|
+
require "active_support/inflector/methods"
|
|
17
|
+
|
|
18
|
+
extension = Module.new do
|
|
19
|
+
def const_missing(missing_const_name)
|
|
20
|
+
if class_variable_defined?(:@@_deprecated_constants)
|
|
21
|
+
if (replacement = class_variable_get(:@@_deprecated_constants)[missing_const_name.to_s])
|
|
22
|
+
replacement[:deprecator].warn(replacement[:message] || "#{name}::#{missing_const_name} is deprecated! Use #{replacement[:new]} instead.", Rails::VERSION::MAJOR == 4 ? caller : caller_locations)
|
|
23
|
+
return ActiveSupport::Inflector.constantize(replacement[:new].to_s)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
super
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def deprecate_constant(const_name, new_constant, message: nil, deprecator: ActiveSupport::Deprecation.instance)
|
|
30
|
+
class_variable_set(:@@_deprecated_constants, {}) unless class_variable_defined?(:@@_deprecated_constants)
|
|
31
|
+
class_variable_get(:@@_deprecated_constants)[const_name.to_s] = { new: new_constant, message: message, deprecator: deprecator }
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
base.singleton_class.prepend extension
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
data/lib/devise/rails/routes.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "active_support/core_ext/object/try"
|
|
2
4
|
require "active_support/core_ext/hash/slice"
|
|
3
5
|
|
|
@@ -133,10 +135,10 @@ module ActionDispatch::Routing
|
|
|
133
135
|
# * failure_app: a rack app which is invoked whenever there is a failure. Strings representing a given
|
|
134
136
|
# are also allowed as parameter.
|
|
135
137
|
#
|
|
136
|
-
# * sign_out_via: the HTTP method(s) accepted for the :sign_out action (default: :
|
|
138
|
+
# * sign_out_via: the HTTP method(s) accepted for the :sign_out action (default: :delete),
|
|
137
139
|
# if you wish to restrict this to accept only :post or :delete requests you should do:
|
|
138
140
|
#
|
|
139
|
-
# devise_for :users, sign_out_via: [:
|
|
141
|
+
# devise_for :users, sign_out_via: [:get, :post]
|
|
140
142
|
#
|
|
141
143
|
# You need to make sure that your sign_out controls trigger a request with a matching HTTP method.
|
|
142
144
|
#
|
|
@@ -285,7 +287,7 @@ module ActionDispatch::Routing
|
|
|
285
287
|
# root to: "admin/dashboard#show", as: :user_root
|
|
286
288
|
# end
|
|
287
289
|
#
|
|
288
|
-
def authenticate(scope=nil, block=nil)
|
|
290
|
+
def authenticate(scope = nil, block = nil)
|
|
289
291
|
constraints_for(:authenticate!, scope, block) do
|
|
290
292
|
yield
|
|
291
293
|
end
|
|
@@ -309,7 +311,7 @@ module ActionDispatch::Routing
|
|
|
309
311
|
#
|
|
310
312
|
# root to: 'landing#show'
|
|
311
313
|
#
|
|
312
|
-
def authenticated(scope=nil, block=nil)
|
|
314
|
+
def authenticated(scope = nil, block = nil)
|
|
313
315
|
constraints_for(:authenticate?, scope, block) do
|
|
314
316
|
yield
|
|
315
317
|
end
|
|
@@ -326,7 +328,7 @@ module ActionDispatch::Routing
|
|
|
326
328
|
#
|
|
327
329
|
# root to: 'dashboard#show'
|
|
328
330
|
#
|
|
329
|
-
def unauthenticated(scope=nil)
|
|
331
|
+
def unauthenticated(scope = nil)
|
|
330
332
|
constraint = lambda do |request|
|
|
331
333
|
not request.env["warden"].authenticate? scope: scope
|
|
332
334
|
end
|
|
@@ -338,7 +340,7 @@ module ActionDispatch::Routing
|
|
|
338
340
|
|
|
339
341
|
# Sets the devise scope to be used in the controller. If you have custom routes,
|
|
340
342
|
# you are required to call this method (also aliased as :as) in order to specify
|
|
341
|
-
# to which controller it is
|
|
343
|
+
# to which controller it is targeted.
|
|
342
344
|
#
|
|
343
345
|
# as :user do
|
|
344
346
|
# get "sign_in", to: "devise/sessions#new"
|
|
@@ -472,7 +474,7 @@ ERROR
|
|
|
472
474
|
@scope = current_scope
|
|
473
475
|
end
|
|
474
476
|
|
|
475
|
-
def constraints_for(method_to_apply, scope=nil, block=nil)
|
|
477
|
+
def constraints_for(method_to_apply, scope = nil, block = nil)
|
|
476
478
|
constraint = lambda do |request|
|
|
477
479
|
request.env['warden'].send(method_to_apply, scope: scope) &&
|
|
478
480
|
(block.nil? || block.call(request.env["warden"].user(scope)))
|