devise 4.7.3 → 4.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +68 -0
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +51 -24
  5. data/app/controllers/devise/confirmations_controller.rb +1 -0
  6. data/app/controllers/devise/passwords_controller.rb +2 -2
  7. data/app/controllers/devise/registrations_controller.rb +1 -1
  8. data/app/controllers/devise/sessions_controller.rb +1 -1
  9. data/app/controllers/devise/unlocks_controller.rb +1 -0
  10. data/app/controllers/devise_controller.rb +14 -0
  11. data/app/helpers/devise_helper.rb +1 -1
  12. data/app/views/devise/registrations/edit.html.erb +1 -1
  13. data/app/views/devise/shared/_error_messages.html.erb +1 -1
  14. data/app/views/devise/shared/_links.html.erb +1 -1
  15. data/config/locales/en.yml +1 -1
  16. data/lib/devise/controllers/responder.rb +35 -0
  17. data/lib/devise/controllers/sign_in_out.rb +4 -2
  18. data/lib/devise/failure_app.rb +6 -2
  19. data/lib/devise/hooks/csrf_cleaner.rb +6 -1
  20. data/lib/devise/hooks/lockable.rb +2 -5
  21. data/lib/devise/models/authenticatable.rb +7 -3
  22. data/lib/devise/models/confirmable.rb +16 -37
  23. data/lib/devise/models/database_authenticatable.rb +11 -30
  24. data/lib/devise/models/lockable.rb +10 -2
  25. data/lib/devise/models/omniauthable.rb +2 -2
  26. data/lib/devise/models/recoverable.rb +6 -17
  27. data/lib/devise/models/rememberable.rb +1 -1
  28. data/lib/devise/models/timeoutable.rb +1 -1
  29. data/lib/devise/models/validatable.rb +4 -9
  30. data/lib/devise/models.rb +1 -0
  31. data/lib/devise/omniauth.rb +2 -5
  32. data/lib/devise/orm.rb +71 -0
  33. data/lib/devise/rails/deprecated_constant_accessor.rb +39 -0
  34. data/lib/devise/rails.rb +4 -0
  35. data/lib/devise/test/controller_helpers.rb +1 -1
  36. data/lib/devise/test_helpers.rb +1 -1
  37. data/lib/devise/version.rb +1 -1
  38. data/lib/devise.rb +34 -7
  39. data/lib/generators/active_record/devise_generator.rb +17 -2
  40. data/lib/generators/templates/devise.rb +10 -8
  41. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +1 -1
  42. metadata +19 -7
@@ -13,7 +13,7 @@ module Devise
13
13
  #
14
14
  # == Options
15
15
  #
16
- # DatabaseAuthenticatable adds the following options to devise_for:
16
+ # DatabaseAuthenticatable adds the following options to +devise+:
17
17
  #
18
18
  # * +pepper+: a random string used to provide a more secure hash. Use
19
19
  # `rails secret` to generate new keys.
@@ -42,7 +42,7 @@ module Devise
42
42
  def initialize(*args, &block)
43
43
  @skip_email_changed_notification = false
44
44
  @skip_password_change_notification = false
45
- super
45
+ super
46
46
  end
47
47
 
48
48
  # Skips sending the email changed notification after_update
@@ -86,7 +86,7 @@ module Devise
86
86
  # is also rejected as long as it is also blank.
87
87
  def update_with_password(params, *options)
88
88
  if options.present?
89
- ActiveSupport::Deprecation.warn <<-DEPRECATION.strip_heredoc
89
+ Devise.deprecator.warn <<-DEPRECATION.strip_heredoc
90
90
  [Devise] The second argument of `DatabaseAuthenticatable#update_with_password`
91
91
  (`options`) is deprecated and it will be removed in the next major version.
92
92
  It was added to support a feature deprecated in Rails 4, so you can safely remove it
@@ -128,7 +128,7 @@ module Devise
128
128
  #
129
129
  def update_without_password(params, *options)
130
130
  if options.present?
131
- ActiveSupport::Deprecation.warn <<-DEPRECATION.strip_heredoc
131
+ Devise.deprecator.warn <<-DEPRECATION.strip_heredoc
132
132
  [Devise] The second argument of `DatabaseAuthenticatable#update_without_password`
133
133
  (`options`) is deprecated and it will be removed in the next major version.
134
134
  It was added to support a feature deprecated in Rails 4, so you can safely remove it
@@ -177,16 +177,9 @@ module Devise
177
177
  encrypted_password[0,29] if encrypted_password
178
178
  end
179
179
 
180
- if Devise.activerecord51?
181
- # Send notification to user when email changes.
182
- def send_email_changed_notification
183
- send_devise_notification(:email_changed, to: email_before_last_save)
184
- end
185
- else
186
- # Send notification to user when email changes.
187
- def send_email_changed_notification
188
- send_devise_notification(:email_changed, to: email_was)
189
- end
180
+ # Send notification to user when email changes.
181
+ def send_email_changed_notification
182
+ send_devise_notification(:email_changed, to: devise_email_before_last_save)
190
183
  end
191
184
 
192
185
  # Send notification to user when password changes.
@@ -205,24 +198,12 @@ module Devise
205
198
  Devise::Encryptor.digest(self.class, password)
206
199
  end
207
200
 
208
- if Devise.activerecord51?
209
- def send_email_changed_notification?
210
- self.class.send_email_changed_notification && saved_change_to_email? && !@skip_email_changed_notification
211
- end
212
- else
213
- def send_email_changed_notification?
214
- self.class.send_email_changed_notification && email_changed? && !@skip_email_changed_notification
215
- end
201
+ def send_email_changed_notification?
202
+ self.class.send_email_changed_notification && devise_saved_change_to_email? && !@skip_email_changed_notification
216
203
  end
217
204
 
218
- if Devise.activerecord51?
219
- def send_password_change_notification?
220
- self.class.send_password_change_notification && saved_change_to_encrypted_password? && !@skip_password_change_notification
221
- end
222
- else
223
- def send_password_change_notification?
224
- self.class.send_password_change_notification && encrypted_password_changed? && !@skip_password_change_notification
225
- end
205
+ def send_password_change_notification?
206
+ self.class.send_password_change_notification && devise_saved_change_to_encrypted_password? && !@skip_password_change_notification
226
207
  end
227
208
 
228
209
  module ClassMethods
@@ -18,7 +18,7 @@ module Devise
18
18
  # * +maximum_attempts+: how many attempts should be accepted before blocking the user.
19
19
  # * +lock_strategy+: lock the user account by :failed_attempts or :none.
20
20
  # * +unlock_strategy+: unlock the user account by :time, :email, :both or :none.
21
- # * +unlock_in+: the time you want to lock the user after to lock happens. Only available when unlock_strategy is :time or :both.
21
+ # * +unlock_in+: the time you want to unlock the user after lock happens. Only available when unlock_strategy is :time or :both.
22
22
  # * +unlock_keys+: the keys you want to use when locking and unlocking an account
23
23
  #
24
24
  module Lockable
@@ -57,6 +57,14 @@ module Devise
57
57
  save(validate: false)
58
58
  end
59
59
 
60
+ # Resets failed attempts counter to 0.
61
+ def reset_failed_attempts!
62
+ if respond_to?(:failed_attempts) && !failed_attempts.to_i.zero?
63
+ self.failed_attempts = 0
64
+ save(validate: false)
65
+ end
66
+ end
67
+
60
68
  # Verifies whether a user is locked or not.
61
69
  def access_locked?
62
70
  !!locked_at && !lock_expired?
@@ -110,7 +118,7 @@ module Devise
110
118
  false
111
119
  end
112
120
  end
113
-
121
+
114
122
  def increment_failed_attempts
115
123
  self.class.increment_counter(:failed_attempts, id)
116
124
  reload
@@ -8,11 +8,11 @@ module Devise
8
8
  #
9
9
  # == Options
10
10
  #
11
- # Oauthable adds the following options to devise_for:
11
+ # Oauthable adds the following options to +devise+:
12
12
  #
13
13
  # * +omniauth_providers+: Which providers are available to this model. It expects an array:
14
14
  #
15
- # devise_for :database_authenticatable, :omniauthable, omniauth_providers: [:twitter]
15
+ # devise :database_authenticatable, :omniauthable, omniauth_providers: [:twitter]
16
16
  #
17
17
  module Omniauthable
18
18
  extend ActiveSupport::Concern
@@ -7,7 +7,7 @@ module Devise
7
7
  #
8
8
  # ==Options
9
9
  #
10
- # Recoverable adds the following options to devise_for:
10
+ # Recoverable adds the following options to +devise+:
11
11
  #
12
12
  # * +reset_password_keys+: the keys you want to use when recovering the password for an account
13
13
  # * +reset_password_within+: the time period within which the password must be reset or the token expires.
@@ -99,24 +99,13 @@ module Devise
99
99
  send_devise_notification(:reset_password_instructions, token, {})
100
100
  end
101
101
 
102
- if Devise.activerecord51?
103
- def clear_reset_password_token?
104
- encrypted_password_changed = respond_to?(:will_save_change_to_encrypted_password?) && will_save_change_to_encrypted_password?
105
- authentication_keys_changed = self.class.authentication_keys.any? do |attribute|
106
- respond_to?("will_save_change_to_#{attribute}?") && send("will_save_change_to_#{attribute}?")
107
- end
108
-
109
- authentication_keys_changed || encrypted_password_changed
102
+ def clear_reset_password_token?
103
+ encrypted_password_changed = devise_respond_to_and_will_save_change_to_attribute?(:encrypted_password)
104
+ authentication_keys_changed = self.class.authentication_keys.any? do |attribute|
105
+ devise_respond_to_and_will_save_change_to_attribute?(attribute)
110
106
  end
111
- else
112
- def clear_reset_password_token?
113
- encrypted_password_changed = respond_to?(:encrypted_password_changed?) && encrypted_password_changed?
114
- authentication_keys_changed = self.class.authentication_keys.any? do |attribute|
115
- respond_to?("#{attribute}_changed?") && send("#{attribute}_changed?")
116
- end
117
107
 
118
- authentication_keys_changed || encrypted_password_changed
119
- end
108
+ authentication_keys_changed || encrypted_password_changed
120
109
  end
121
110
 
122
111
  module ClassMethods
@@ -15,7 +15,7 @@ module Devise
15
15
  #
16
16
  # == Options
17
17
  #
18
- # Rememberable adds the following options in devise_for:
18
+ # Rememberable adds the following options to +devise+:
19
19
  #
20
20
  # * +remember_for+: the time you want the user will be remembered without
21
21
  # asking for credentials. After this time the user will be blocked and
@@ -11,7 +11,7 @@ module Devise
11
11
  #
12
12
  # == Options
13
13
  #
14
- # Timeoutable adds the following options to devise_for:
14
+ # Timeoutable adds the following options to +devise+:
15
15
  #
16
16
  # * +timeout_in+: the interval to timeout the user session without activity.
17
17
  #
@@ -9,7 +9,7 @@ module Devise
9
9
  #
10
10
  # == Options
11
11
  #
12
- # Validatable adds the following options to devise_for:
12
+ # Validatable adds the following options to +devise+:
13
13
  #
14
14
  # * +email_regexp+: the regular expression used to validate e-mails;
15
15
  # * +password_length+: a range expressing password length. Defaults to 6..128.
@@ -29,13 +29,8 @@ module Devise
29
29
 
30
30
  base.class_eval do
31
31
  validates_presence_of :email, if: :email_required?
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
+ validates_uniqueness_of :email, allow_blank: true, case_sensitive: true, if: :devise_will_save_change_to_email?
33
+ validates_format_of :email, with: email_regexp, allow_blank: true, if: :devise_will_save_change_to_email?
39
34
 
40
35
  validates_presence_of :password, if: :password_required?
41
36
  validates_confirmation_of :password, if: :password_required?
@@ -47,7 +42,7 @@ module Devise
47
42
  unavailable_validations = VALIDATIONS.select { |v| !base.respond_to?(v) }
48
43
 
49
44
  unless unavailable_validations.empty?
50
- raise "Could not use :validatable module since #{base} does not respond " <<
45
+ raise "Could not use :validatable module since #{base} does not respond " \
51
46
  "to the following methods: #{unavailable_validations.to_sentence}."
52
47
  end
53
48
  end
data/lib/devise/models.rb CHANGED
@@ -84,6 +84,7 @@ module Devise
84
84
  end
85
85
 
86
86
  devise_modules_hook! do
87
+ include Devise::Orm
87
88
  include Devise::Models::Authenticatable
88
89
 
89
90
  selected_modules.each do |m|
@@ -1,17 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  begin
4
+ gem "omniauth", ">= 1.0.0"
5
+
4
6
  require "omniauth"
5
- require "omniauth/version"
6
7
  rescue LoadError
7
8
  warn "Could not load 'omniauth'. Please ensure you have the omniauth gem >= 1.0.0 installed and listed in your Gemfile."
8
9
  raise
9
10
  end
10
11
 
11
- unless OmniAuth::VERSION =~ /^1\./
12
- raise "You are using an old OmniAuth version, please ensure you have 1.0.0.pr2 version or later installed."
13
- end
14
-
15
12
  # Clean up the default path_prefix. It will be automatically set by Devise.
16
13
  OmniAuth.config.path_prefix = nil
17
14
 
data/lib/devise/orm.rb ADDED
@@ -0,0 +1,71 @@
1
+ module Devise
2
+ module Orm # :nodoc:
3
+ def self.active_record?(model)
4
+ defined?(ActiveRecord) && model < ActiveRecord::Base
5
+ end
6
+
7
+ def self.active_record_51?(model)
8
+ active_record?(model) && ActiveRecord.gem_version >= Gem::Version.new("5.1.x")
9
+ end
10
+
11
+ def self.included(model)
12
+ if Devise::Orm.active_record_51?(model)
13
+ model.include DirtyTrackingNewMethods
14
+ else
15
+ model.include DirtyTrackingOldMethods
16
+ end
17
+ end
18
+
19
+ module DirtyTrackingNewMethods
20
+ def devise_email_before_last_save
21
+ email_before_last_save
22
+ end
23
+
24
+ def devise_email_in_database
25
+ email_in_database
26
+ end
27
+
28
+ def devise_saved_change_to_email?
29
+ saved_change_to_email?
30
+ end
31
+
32
+ def devise_saved_change_to_encrypted_password?
33
+ saved_change_to_encrypted_password?
34
+ end
35
+
36
+ def devise_will_save_change_to_email?
37
+ will_save_change_to_email?
38
+ end
39
+
40
+ def devise_respond_to_and_will_save_change_to_attribute?(attribute)
41
+ respond_to?("will_save_change_to_#{attribute}?") && send("will_save_change_to_#{attribute}?")
42
+ end
43
+ end
44
+
45
+ module DirtyTrackingOldMethods
46
+ def devise_email_before_last_save
47
+ email_was
48
+ end
49
+
50
+ def devise_email_in_database
51
+ email_was
52
+ end
53
+
54
+ def devise_saved_change_to_email?
55
+ email_changed?
56
+ end
57
+
58
+ def devise_saved_change_to_encrypted_password?
59
+ encrypted_password_changed?
60
+ end
61
+
62
+ def devise_will_save_change_to_email?
63
+ email_changed?
64
+ end
65
+
66
+ def devise_respond_to_and_will_save_change_to_attribute?(attribute)
67
+ respond_to?("#{attribute}_changed?") && send("#{attribute}_changed?")
68
+ end
69
+ end
70
+ end
71
+ end
@@ -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: Devise.deprecator)
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.rb CHANGED
@@ -17,6 +17,10 @@ module Devise
17
17
  app.reload_routes! if Devise.reload_routes
18
18
  end
19
19
 
20
+ initializer "devise.deprecator" do |app|
21
+ app.deprecators[:devise] = Devise.deprecator if app.respond_to?(:deprecators)
22
+ end
23
+
20
24
  initializer "devise.url_helpers" do
21
25
  Devise.include_helpers(Devise::Controllers)
22
26
  end
@@ -69,7 +69,7 @@ module Devise
69
69
  scope = resource
70
70
  resource = deprecated
71
71
 
72
- ActiveSupport::Deprecation.warn <<-DEPRECATION.strip_heredoc
72
+ Devise.deprecator.warn <<-DEPRECATION.strip_heredoc
73
73
  [Devise] sign_in(:#{scope}, resource) on controller tests is deprecated and will be removed from Devise.
74
74
  Please use sign_in(resource, scope: :#{scope}) instead.
75
75
  DEPRECATION
@@ -4,7 +4,7 @@ module Devise
4
4
  module TestHelpers
5
5
  def self.included(base)
6
6
  base.class_eval do
7
- ActiveSupport::Deprecation.warn <<-DEPRECATION.strip_heredoc
7
+ Devise.deprecator.warn <<-DEPRECATION.strip_heredoc
8
8
  [Devise] including `Devise::TestHelpers` is deprecated and will be removed from Devise.
9
9
  For controller tests, please include `Devise::Test::ControllerHelpers` instead.
10
10
  DEPRECATION
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Devise
4
- VERSION = "4.7.3".freeze
4
+ VERSION = "4.9.3".freeze
5
5
  end
data/lib/devise.rb CHANGED
@@ -13,6 +13,7 @@ module Devise
13
13
  autoload :Encryptor, 'devise/encryptor'
14
14
  autoload :FailureApp, 'devise/failure_app'
15
15
  autoload :OmniAuth, 'devise/omniauth'
16
+ autoload :Orm, 'devise/orm'
16
17
  autoload :ParameterFilter, 'devise/parameter_filter'
17
18
  autoload :ParameterSanitizer, 'devise/parameter_sanitizer'
18
19
  autoload :TestHelpers, 'devise/test_helpers'
@@ -23,6 +24,7 @@ module Devise
23
24
  module Controllers
24
25
  autoload :Helpers, 'devise/controllers/helpers'
25
26
  autoload :Rememberable, 'devise/controllers/rememberable'
27
+ autoload :Responder, 'devise/controllers/responder'
26
28
  autoload :ScopedViews, 'devise/controllers/scoped_views'
27
29
  autoload :SignInOut, 'devise/controllers/sign_in_out'
28
30
  autoload :StoreLocation, 'devise/controllers/store_location'
@@ -217,7 +219,16 @@ module Devise
217
219
 
218
220
  # Which formats should be treated as navigational.
219
221
  mattr_accessor :navigational_formats
220
- @@navigational_formats = ["*/*", :html]
222
+ @@navigational_formats = ["*/*", :html, :turbo_stream]
223
+
224
+ # The default responder used by Devise, used to customize status codes with:
225
+ #
226
+ # `config.responder.error_status`
227
+ # `config.responder.redirect_status`
228
+ #
229
+ # Can be replaced by a custom application responder.
230
+ mattr_accessor :responder
231
+ @@responder = Devise::Controllers::Responder
221
232
 
222
233
  # When set to true, signing out a user signs out all other scopes.
223
234
  mattr_accessor :sign_out_all_scopes
@@ -297,10 +308,6 @@ module Devise
297
308
  mattr_accessor :sign_in_after_change_password
298
309
  @@sign_in_after_change_password = true
299
310
 
300
- def self.activerecord51? # :nodoc:
301
- defined?(ActiveRecord) && ActiveRecord.gem_version >= Gem::Version.new("5.1.x")
302
- end
303
-
304
311
  # Default way to set up Devise. Run rails generate devise_install to create
305
312
  # a fresh initializer with all configuration values.
306
313
  def self.setup
@@ -313,12 +320,20 @@ module Devise
313
320
  end
314
321
 
315
322
  def get
316
- ActiveSupport::Dependencies.constantize(@name)
323
+ # TODO: Remove AS::Dependencies usage when dropping support to Rails < 7.
324
+ if ActiveSupport::Dependencies.respond_to?(:constantize)
325
+ ActiveSupport::Dependencies.constantize(@name)
326
+ else
327
+ @name.constantize
328
+ end
317
329
  end
318
330
  end
319
331
 
320
332
  def self.ref(arg)
321
- ActiveSupport::Dependencies.reference(arg)
333
+ # TODO: Remove AS::Dependencies usage when dropping support to Rails < 7.
334
+ if ActiveSupport::Dependencies.respond_to?(:reference)
335
+ ActiveSupport::Dependencies.reference(arg)
336
+ end
322
337
  Getter.new(arg)
323
338
  end
324
339
 
@@ -505,6 +520,18 @@ module Devise
505
520
  b.each_byte { |byte| res |= byte ^ l.shift }
506
521
  res == 0
507
522
  end
523
+
524
+ def self.deprecator
525
+ @deprecator ||= ActiveSupport::Deprecation.new("5.0", "Devise")
526
+ end
527
+
528
+ def self.activerecord51? # :nodoc:
529
+ deprecator.warn <<-DEPRECATION.strip_heredoc
530
+ [Devise] `Devise.activerecord51?` is deprecated and will be removed in the next major version.
531
+ It is a non-public method that's no longer used internally, but that other libraries have been relying on.
532
+ DEPRECATION
533
+ defined?(ActiveRecord) && ActiveRecord.gem_version >= Gem::Version.new("5.1.x")
534
+ end
508
535
  end
509
536
 
510
537
  require 'warden'
@@ -86,9 +86,24 @@ RUBY
86
86
  Rails::VERSION::MAJOR >= 5
87
87
  end
88
88
 
89
+ def rails61_and_up?
90
+ Rails::VERSION::MAJOR > 6 || (Rails::VERSION::MAJOR == 6 && Rails::VERSION::MINOR >= 1)
91
+ end
92
+
89
93
  def postgresql?
90
- config = ActiveRecord::Base.configurations[Rails.env]
91
- config && config['adapter'] == 'postgresql'
94
+ ar_config && ar_config['adapter'] == 'postgresql'
95
+ end
96
+
97
+ def ar_config
98
+ if ActiveRecord::Base.configurations.respond_to?(:configs_for)
99
+ if rails61_and_up?
100
+ ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, name: "primary").configuration_hash
101
+ else
102
+ ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: "primary").config
103
+ end
104
+ else
105
+ ActiveRecord::Base.configurations[Rails.env]
106
+ end
92
107
  end
93
108
 
94
109
  def migration_version
@@ -256,14 +256,14 @@ Devise.setup do |config|
256
256
 
257
257
  # ==> Navigation configuration
258
258
  # Lists the formats that should be treated as navigational. Formats like
259
- # :html, should redirect to the sign in page when the user does not have
259
+ # :html should redirect to the sign in page when the user does not have
260
260
  # access, but formats like :xml or :json, should return 401.
261
261
  #
262
262
  # If you have any extra navigational formats, like :iphone or :mobile, you
263
263
  # should add them to the navigational formats lists.
264
264
  #
265
265
  # The "*/*" below is required to match Internet Explorer requests.
266
- # config.navigational_formats = ['*/*', :html]
266
+ # config.navigational_formats = ['*/*', :html, :turbo_stream]
267
267
 
268
268
  # The default HTTP method used to sign out a resource. Default is :delete.
269
269
  config.sign_out_via = :delete
@@ -296,12 +296,14 @@ Devise.setup do |config|
296
296
  # so you need to do it manually. For the users scope, it would be:
297
297
  # config.omniauth_path_prefix = '/my_engine/users/auth'
298
298
 
299
- # ==> Turbolinks configuration
300
- # If your app is using Turbolinks, Turbolinks::Controller needs to be included to make redirection work correctly:
301
- #
302
- # ActiveSupport.on_load(:devise_failure_app) do
303
- # include Turbolinks::Controller
304
- # end
299
+ # ==> Hotwire/Turbo configuration
300
+ # When using Devise with Hotwire/Turbo, the http status for error responses
301
+ # and some redirects must match the following. The default in Devise for existing
302
+ # apps is `200 OK` and `302 Found` respectively, but new apps are generated with
303
+ # these new defaults that match Hotwire/Turbo behavior.
304
+ # Note: These might become the new default in future versions of Devise.
305
+ config.responder.error_status = :unprocessable_entity
306
+ config.responder.redirect_status = :see_other
305
307
 
306
308
  # ==> Configuration for :registerable
307
309
 
@@ -30,6 +30,6 @@
30
30
 
31
31
  <h3>Cancel my account</h3>
32
32
 
33
- <p>Unhappy? <%= link_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete %></p>
33
+ <div>Unhappy? <%= button_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?", turbo_confirm: "Are you sure?" }, method: :delete %></div>
34
34
 
35
35
  <%= link_to "Back", :back %>
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.7.3
4
+ version: 4.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - José Valim
8
8
  - Carlos Antônio
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-09-21 00:00:00.000000000 Z
12
+ date: 2023-10-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: warden
@@ -117,6 +117,7 @@ files:
117
117
  - lib/devise.rb
118
118
  - lib/devise/controllers/helpers.rb
119
119
  - lib/devise/controllers/rememberable.rb
120
+ - lib/devise/controllers/responder.rb
120
121
  - lib/devise/controllers/scoped_views.rb
121
122
  - lib/devise/controllers/sign_in_out.rb
122
123
  - lib/devise/controllers/store_location.rb
@@ -150,11 +151,13 @@ files:
150
151
  - lib/devise/omniauth.rb
151
152
  - lib/devise/omniauth/config.rb
152
153
  - lib/devise/omniauth/url_helpers.rb
154
+ - lib/devise/orm.rb
153
155
  - lib/devise/orm/active_record.rb
154
156
  - lib/devise/orm/mongoid.rb
155
157
  - lib/devise/parameter_filter.rb
156
158
  - lib/devise/parameter_sanitizer.rb
157
159
  - lib/devise/rails.rb
160
+ - lib/devise/rails/deprecated_constant_accessor.rb
158
161
  - lib/devise/rails/routes.rb
159
162
  - lib/devise/rails/warden_compat.rb
160
163
  - lib/devise/secret_key_finder.rb
@@ -201,8 +204,17 @@ files:
201
204
  homepage: https://github.com/heartcombo/devise
202
205
  licenses:
203
206
  - MIT
204
- metadata: {}
205
- post_install_message:
207
+ metadata:
208
+ homepage_uri: https://github.com/heartcombo/devise
209
+ documentation_uri: https://rubydoc.info/github/heartcombo/devise
210
+ changelog_uri: https://github.com/heartcombo/devise/blob/main/CHANGELOG.md
211
+ source_code_uri: https://github.com/heartcombo/devise
212
+ bug_tracker_uri: https://github.com/heartcombo/devise/issues
213
+ wiki_uri: https://github.com/heartcombo/devise/wiki
214
+ post_install_message: "\n[DEVISE] Please review the [changelog] and [upgrade guide]
215
+ for more info on Hotwire / Turbo integration.\n\n [changelog] https://github.com/heartcombo/devise/blob/main/CHANGELOG.md\n
216
+ \ [upgrade guide] https://github.com/heartcombo/devise/wiki/How-To:-Upgrade-to-Devise-4.9.0-%5BHotwire-Turbo-integration%5D\n
217
+ \ "
206
218
  rdoc_options: []
207
219
  require_paths:
208
220
  - lib
@@ -217,8 +229,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
217
229
  - !ruby/object:Gem::Version
218
230
  version: '0'
219
231
  requirements: []
220
- rubygems_version: 3.0.3
221
- signing_key:
232
+ rubygems_version: 3.4.10
233
+ signing_key:
222
234
  specification_version: 4
223
235
  summary: Flexible authentication solution for Rails with Warden
224
236
  test_files: []