devise 4.3.0 → 4.9.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +205 -2
- data/MIT-LICENSE +2 -1
- data/README.md +214 -57
- data/app/controllers/devise/confirmations_controller.rb +3 -0
- data/app/controllers/devise/omniauth_callbacks_controller.rb +3 -1
- data/app/controllers/devise/passwords_controller.rb +5 -2
- data/app/controllers/devise/registrations_controller.rb +32 -12
- data/app/controllers/devise/sessions_controller.rb +4 -2
- data/app/controllers/devise/unlocks_controller.rb +3 -0
- data/app/controllers/devise_controller.rb +6 -3
- data/app/helpers/devise_helper.rb +23 -18
- data/app/mailers/devise/mailer.rb +7 -5
- data/app/views/devise/confirmations/new.html.erb +2 -2
- 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 +6 -6
- 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 +3 -2
- data/lib/devise/controllers/helpers.rb +10 -8
- data/lib/devise/controllers/rememberable.rb +2 -0
- data/lib/devise/controllers/responder.rb +35 -0
- data/lib/devise/controllers/scoped_views.rb +2 -0
- data/lib/devise/controllers/sign_in_out.rb +14 -4
- data/lib/devise/controllers/store_location.rb +24 -6
- 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 +33 -7
- data/lib/devise/hooks/activatable.rb +2 -0
- data/lib/devise/hooks/csrf_cleaner.rb +8 -1
- data/lib/devise/hooks/forgetable.rb +2 -0
- data/lib/devise/hooks/lockable.rb +4 -5
- data/lib/devise/hooks/proxy.rb +2 -0
- 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 +2 -0
- data/lib/devise/mapping.rb +3 -1
- data/lib/devise/models/authenticatable.rb +55 -50
- data/lib/devise/models/confirmable.rb +36 -40
- data/lib/devise/models/database_authenticatable.rb +57 -36
- data/lib/devise/models/lockable.rb +18 -4
- data/lib/devise/models/omniauthable.rb +4 -2
- data/lib/devise/models/recoverable.rb +10 -19
- data/lib/devise/models/registerable.rb +4 -0
- data/lib/devise/models/rememberable.rb +5 -3
- data/lib/devise/models/timeoutable.rb +3 -1
- data/lib/devise/models/trackable.rb +15 -1
- data/lib/devise/models/validatable.rb +7 -10
- data/lib/devise/models.rb +3 -0
- 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 +4 -5
- data/lib/devise/orm/active_record.rb +2 -0
- data/lib/devise/orm/mongoid.rb +2 -0
- data/lib/devise/orm.rb +71 -0
- data/lib/devise/parameter_filter.rb +4 -0
- data/lib/devise/parameter_sanitizer.rb +15 -1
- data/lib/devise/rails/deprecated_constant_accessor.rb +39 -0
- data/lib/devise/rails/routes.rb +8 -6
- data/lib/devise/rails/warden_compat.rb +2 -0
- data/lib/devise/rails.rb +3 -5
- 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 +6 -1
- data/lib/devise/test/integration_helpers.rb +3 -1
- data/lib/devise/test_helpers.rb +2 -0
- 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 +38 -12
- 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 -1
- 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 +2 -0
- data/lib/generators/templates/controllers/sessions_controller.rb +2 -0
- data/lib/generators/templates/controllers/unlocks_controller.rb +2 -0
- data/lib/generators/templates/devise.rb +43 -7
- 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 +12 -4
- 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 +24 -307
- data/.gitignore +0 -10
- data/.travis.yml +0 -58
- data/.yardopts +0 -9
- data/CODE_OF_CONDUCT.md +0 -22
- data/CONTRIBUTING.md +0 -79
- data/Gemfile +0 -40
- data/Gemfile.lock +0 -194
- 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 -171
- 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-stable +0 -34
- data/gemfiles/Gemfile.rails-5.0-stable.lock +0 -193
- data/guides/bug_report_templates/integration_test.rb +0 -104
- 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 -338
- 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/mounted_engine_test.rb +0 -36
- data/test/integration/omniauthable_test.rb +0 -135
- data/test/integration/recoverable_test.rb +0 -347
- data/test/integration/registerable_test.rb +0 -363
- data/test/integration/rememberable_test.rb +0 -217
- 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/email_changed_test.rb +0 -130
- data/test/mailers/mailer_test.rb +0 -18
- 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 -536
- data/test/models/database_authenticatable_test.rb +0 -281
- data/test/models/lockable_test.rb +0 -350
- data/test/models/omniauthable_test.rb +0 -7
- data/test/models/recoverable_test.rb +0 -261
- data/test/models/registerable_test.rb +0 -7
- data/test/models/rememberable_test.rb +0 -182
- data/test/models/serializable_test.rb +0 -54
- 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 -59
- 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 -75
- 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/application.rb +0 -44
- data/test/rails_app/config/boot.rb +0 -20
- 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 -86
- data/test/rails_app/config/environments/test.rb +0 -45
- 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/config.ru +0 -4
- data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -75
- data/test/rails_app/db/schema.rb +0 -55
- data/test/rails_app/lib/shared_admin.rb +0 -21
- 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 -28
- 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/controller_helpers_test.rb +0 -186
- data/test/test/integration_helpers_test.rb +0 -32
- data/test/test_helper.rb +0 -34
- data/test/test_models.rb +0 -33
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
|
@@ -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)))
|
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
|
|
@@ -32,11 +34,7 @@ module Devise
|
|
32
34
|
end
|
33
35
|
|
34
36
|
initializer "devise.secret_key" do |app|
|
35
|
-
|
36
|
-
Devise.secret_key ||= app.secrets.secret_key_base
|
37
|
-
elsif app.config.respond_to?(:secret_key_base)
|
38
|
-
Devise.secret_key ||= app.config.secret_key_base
|
39
|
-
end
|
37
|
+
Devise.secret_key ||= Devise::SecretKeyFinder.new(app).find
|
40
38
|
|
41
39
|
Devise.token_generator ||=
|
42
40
|
if secret_key = Devise.secret_key
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Devise
|
4
|
+
class SecretKeyFinder
|
5
|
+
def initialize(application)
|
6
|
+
@application = application
|
7
|
+
end
|
8
|
+
|
9
|
+
def find
|
10
|
+
if @application.respond_to?(:credentials) && key_exists?(@application.credentials)
|
11
|
+
@application.credentials.secret_key_base
|
12
|
+
elsif @application.respond_to?(:secrets) && key_exists?(@application.secrets)
|
13
|
+
@application.secrets.secret_key_base
|
14
|
+
elsif @application.config.respond_to?(:secret_key_base) && key_exists?(@application.config)
|
15
|
+
@application.config.secret_key_base
|
16
|
+
elsif @application.respond_to?(:secret_key_base) && key_exists?(@application)
|
17
|
+
@application.secret_key_base
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def key_exists?(object)
|
24
|
+
object.secret_key_base.present?
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'devise/strategies/base'
|
2
4
|
|
3
5
|
module Devise
|
@@ -26,7 +28,7 @@ module Devise
|
|
26
28
|
private
|
27
29
|
|
28
30
|
# Receives a resource and check if it is valid by calling valid_for_authentication?
|
29
|
-
#
|
31
|
+
# A block that will be triggered while validating can be optionally
|
30
32
|
# given as parameter. Check Devise::Models::Authenticatable.valid_for_authentication?
|
31
33
|
# for more information.
|
32
34
|
#
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'devise/strategies/authenticatable'
|
2
4
|
|
3
5
|
module Devise
|
@@ -14,8 +16,13 @@ module Devise
|
|
14
16
|
success!(resource)
|
15
17
|
end
|
16
18
|
|
19
|
+
# In paranoid mode, hash the password even when a resource doesn't exist for the given authentication key.
|
20
|
+
# This is necessary to prevent enumeration attacks - e.g. the request is faster when a resource doesn't
|
21
|
+
# exist in the database if the password hashing algorithm is not called.
|
17
22
|
mapping.to.new.password = password if !hashed && Devise.paranoid
|
18
|
-
|
23
|
+
unless resource
|
24
|
+
Devise.paranoid ? fail(:invalid) : fail(:not_found_in_database)
|
25
|
+
end
|
19
26
|
end
|
20
27
|
end
|
21
28
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Devise
|
2
4
|
module Test
|
3
5
|
# `Devise::Test::ControllerHelpers` provides a facility to test controllers
|
@@ -35,6 +37,8 @@ module Devise
|
|
35
37
|
@response
|
36
38
|
end
|
37
39
|
|
40
|
+
ruby2_keywords(:process) if respond_to?(:ruby2_keywords, true)
|
41
|
+
|
38
42
|
# We need to set up the environment variables and the response in the controller.
|
39
43
|
def setup_controller_for_warden #:nodoc:
|
40
44
|
@request.env['action_controller.instance'] = @controller
|
@@ -137,8 +141,9 @@ module Devise
|
|
137
141
|
|
138
142
|
status, headers, response = Devise.warden_config[:failure_app].call(env).to_a
|
139
143
|
@controller.response.headers.merge!(headers)
|
144
|
+
@controller.response.content_type = headers["Content-Type"] unless Rails::VERSION::MAJOR >= 5
|
140
145
|
@controller.status = status
|
141
|
-
@controller.
|
146
|
+
@controller.response_body = response.body
|
142
147
|
nil # causes process return @response
|
143
148
|
end
|
144
149
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Devise
|
2
4
|
# Devise::Test::IntegrationHelpers is a helper module for facilitating
|
3
5
|
# authentication on Rails integration tests to bypass the required steps for
|
@@ -26,7 +28,7 @@ module Devise
|
|
26
28
|
end
|
27
29
|
end
|
28
30
|
|
29
|
-
# Signs in a specific resource, mimicking a
|
31
|
+
# Signs in a specific resource, mimicking a successful sign in
|
30
32
|
# operation through +Devise::SessionsController#create+.
|
31
33
|
#
|
32
34
|
# * +resource+ - The resource that should be authenticated
|
data/lib/devise/test_helpers.rb
CHANGED
data/lib/devise/version.rb
CHANGED
data/lib/devise.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails'
|
2
4
|
require 'active_support/core_ext/numeric/time'
|
3
5
|
require 'active_support/dependencies'
|
@@ -11,15 +13,18 @@ module Devise
|
|
11
13
|
autoload :Encryptor, 'devise/encryptor'
|
12
14
|
autoload :FailureApp, 'devise/failure_app'
|
13
15
|
autoload :OmniAuth, 'devise/omniauth'
|
16
|
+
autoload :Orm, 'devise/orm'
|
14
17
|
autoload :ParameterFilter, 'devise/parameter_filter'
|
15
18
|
autoload :ParameterSanitizer, 'devise/parameter_sanitizer'
|
16
19
|
autoload :TestHelpers, 'devise/test_helpers'
|
17
20
|
autoload :TimeInflector, 'devise/time_inflector'
|
18
21
|
autoload :TokenGenerator, 'devise/token_generator'
|
22
|
+
autoload :SecretKeyFinder, 'devise/secret_key_finder'
|
19
23
|
|
20
24
|
module Controllers
|
21
25
|
autoload :Helpers, 'devise/controllers/helpers'
|
22
26
|
autoload :Rememberable, 'devise/controllers/rememberable'
|
27
|
+
autoload :Responder, 'devise/controllers/responder'
|
23
28
|
autoload :ScopedViews, 'devise/controllers/scoped_views'
|
24
29
|
autoload :SignInOut, 'devise/controllers/sign_in_out'
|
25
30
|
autoload :StoreLocation, 'devise/controllers/store_location'
|
@@ -68,7 +73,7 @@ module Devise
|
|
68
73
|
|
69
74
|
# The number of times to hash the password.
|
70
75
|
mattr_accessor :stretches
|
71
|
-
@@stretches =
|
76
|
+
@@stretches = 12
|
72
77
|
|
73
78
|
# The default key used when authenticating over http auth.
|
74
79
|
mattr_accessor :http_authentication_key
|
@@ -149,7 +154,7 @@ module Devise
|
|
149
154
|
mattr_accessor :timeout_in
|
150
155
|
@@timeout_in = 30.minutes
|
151
156
|
|
152
|
-
# Used to hash the password. Please generate one with
|
157
|
+
# Used to hash the password. Please generate one with rails secret.
|
153
158
|
mattr_accessor :pepper
|
154
159
|
@@pepper = nil
|
155
160
|
|
@@ -214,7 +219,16 @@ module Devise
|
|
214
219
|
|
215
220
|
# Which formats should be treated as navigational.
|
216
221
|
mattr_accessor :navigational_formats
|
217
|
-
@@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
|
218
232
|
|
219
233
|
# When set to true, signing out a user signs out all other scopes.
|
220
234
|
mattr_accessor :sign_out_all_scopes
|
@@ -290,13 +304,9 @@ module Devise
|
|
290
304
|
mattr_accessor :token_generator
|
291
305
|
@@token_generator = nil
|
292
306
|
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
def self.activerecord51? # :nodoc:
|
298
|
-
defined?(ActiveRecord) && ActiveRecord.gem_version >= Gem::Version.new("5.1.x")
|
299
|
-
end
|
307
|
+
# When set to false, changing a password does not automatically sign in a user
|
308
|
+
mattr_accessor :sign_in_after_change_password
|
309
|
+
@@sign_in_after_change_password = true
|
300
310
|
|
301
311
|
# Default way to set up Devise. Run rails generate devise_install to create
|
302
312
|
# a fresh initializer with all configuration values.
|
@@ -310,12 +320,20 @@ module Devise
|
|
310
320
|
end
|
311
321
|
|
312
322
|
def get
|
313
|
-
|
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
|
314
329
|
end
|
315
330
|
end
|
316
331
|
|
317
332
|
def self.ref(arg)
|
318
|
-
|
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
|
319
337
|
Getter.new(arg)
|
320
338
|
end
|
321
339
|
|
@@ -502,6 +520,14 @@ module Devise
|
|
502
520
|
b.each_byte { |byte| res |= byte ^ l.shift }
|
503
521
|
res == 0
|
504
522
|
end
|
523
|
+
|
524
|
+
def self.activerecord51? # :nodoc:
|
525
|
+
ActiveSupport::Deprecation.warn <<-DEPRECATION.strip_heredoc
|
526
|
+
[Devise] `Devise.activerecord51?` is deprecated and will be removed in the next major version.
|
527
|
+
It is a non-public method that's no longer used internally, but that other libraries have been relying on.
|
528
|
+
DEPRECATION
|
529
|
+
defined?(ActiveRecord) && ActiveRecord.gem_version >= Gem::Version.new("5.1.x")
|
530
|
+
end
|
505
531
|
end
|
506
532
|
|
507
533
|
require 'warden'
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails/generators/active_record'
|
2
4
|
require 'generators/devise/orm_helpers'
|
3
5
|
|
@@ -6,14 +8,16 @@ module ActiveRecord
|
|
6
8
|
class DeviseGenerator < ActiveRecord::Generators::Base
|
7
9
|
argument :attributes, type: :array, default: [], banner: "field:type field:type"
|
8
10
|
|
11
|
+
class_option :primary_key_type, type: :string, desc: "The type for primary key"
|
12
|
+
|
9
13
|
include Devise::Generators::OrmHelpers
|
10
14
|
source_root File.expand_path("../templates", __FILE__)
|
11
15
|
|
12
16
|
def copy_devise_migration
|
13
17
|
if (behavior == :invoke && model_exists?) || (behavior == :revoke && migration_exists?(table_name))
|
14
|
-
migration_template "migration_existing.rb", "
|
18
|
+
migration_template "migration_existing.rb", "#{migration_path}/add_devise_to_#{table_name}.rb", migration_version: migration_version
|
15
19
|
else
|
16
|
-
migration_template "migration.rb", "
|
20
|
+
migration_template "migration.rb", "#{migration_path}/devise_create_#{table_name}.rb", migration_version: migration_version
|
17
21
|
end
|
18
22
|
end
|
19
23
|
|
@@ -50,11 +54,11 @@ module ActiveRecord
|
|
50
54
|
t.datetime :remember_created_at
|
51
55
|
|
52
56
|
## Trackable
|
53
|
-
t.integer :sign_in_count, default: 0, null: false
|
54
|
-
t.datetime :current_sign_in_at
|
55
|
-
t.datetime :last_sign_in_at
|
56
|
-
t.#{ip_column} :current_sign_in_ip
|
57
|
-
t.#{ip_column} :last_sign_in_ip
|
57
|
+
# t.integer :sign_in_count, default: 0, null: false
|
58
|
+
# t.datetime :current_sign_in_at
|
59
|
+
# t.datetime :last_sign_in_at
|
60
|
+
# t.#{ip_column} :current_sign_in_ip
|
61
|
+
# t.#{ip_column} :last_sign_in_ip
|
58
62
|
|
59
63
|
## Confirmable
|
60
64
|
# t.string :confirmation_token
|
@@ -78,20 +82,44 @@ RUBY
|
|
78
82
|
postgresql?
|
79
83
|
end
|
80
84
|
|
81
|
-
def
|
82
|
-
Rails
|
85
|
+
def rails5_and_up?
|
86
|
+
Rails::VERSION::MAJOR >= 5
|
87
|
+
end
|
88
|
+
|
89
|
+
def rails61_and_up?
|
90
|
+
Rails::VERSION::MAJOR > 6 || (Rails::VERSION::MAJOR == 6 && Rails::VERSION::MINOR >= 1)
|
83
91
|
end
|
84
92
|
|
85
93
|
def postgresql?
|
86
|
-
|
87
|
-
|
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
|
88
107
|
end
|
89
108
|
|
90
109
|
def migration_version
|
91
|
-
if
|
110
|
+
if rails5_and_up?
|
92
111
|
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
|
93
112
|
end
|
94
113
|
end
|
114
|
+
|
115
|
+
def primary_key_type
|
116
|
+
primary_key_string if rails5_and_up?
|
117
|
+
end
|
118
|
+
|
119
|
+
def primary_key_string
|
120
|
+
key_string = options[:primary_key_type]
|
121
|
+
", id: :#{key_string}" if key_string
|
122
|
+
end
|
95
123
|
end
|
96
124
|
end
|
97
125
|
end
|
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class DeviseCreate<%= table_name.camelize %> < ActiveRecord::Migration<%= migration_version %>
|
2
4
|
def change
|
3
|
-
create_table :<%= table_name %> do |t|
|
5
|
+
create_table :<%= table_name %><%= primary_key_type %> do |t|
|
4
6
|
<%= migration_data -%>
|
5
7
|
|
6
8
|
<% attributes.each do |attribute| -%>
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails/generators/base'
|
2
4
|
|
3
5
|
module Devise
|
@@ -16,7 +18,7 @@ module Devise
|
|
16
18
|
|
17
19
|
This will create a controller class at app/controllers/users/sessions_controller.rb like this:
|
18
20
|
|
19
|
-
class Users::
|
21
|
+
class Users::SessionsController < Devise::SessionsController
|
20
22
|
content...
|
21
23
|
end
|
22
24
|
DESC
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails/generators/named_base'
|
2
4
|
|
3
5
|
module Devise
|
@@ -8,15 +10,15 @@ module Devise
|
|
8
10
|
namespace "devise"
|
9
11
|
source_root File.expand_path("../templates", __FILE__)
|
10
12
|
|
11
|
-
desc "Generates a model with the given NAME (if one does not exist) with devise "
|
13
|
+
desc "Generates a model with the given NAME (if one does not exist) with devise " \
|
12
14
|
"configuration plus a migration file and devise routes."
|
13
15
|
|
14
|
-
hook_for :orm
|
16
|
+
hook_for :orm, required: true
|
15
17
|
|
16
18
|
class_option :routes, desc: "Generate routes", type: :boolean, default: true
|
17
19
|
|
18
20
|
def add_devise_routes
|
19
|
-
devise_route = "devise_for :#{plural_name}"
|
21
|
+
devise_route = "devise_for :#{plural_name}".dup
|
20
22
|
devise_route << %Q(, class_name: "#{class_name}") if class_name.include?("::")
|
21
23
|
devise_route << %Q(, skip: :all) unless options.routes?
|
22
24
|
route devise_route
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails/generators/base'
|
2
4
|
require 'securerandom'
|
3
5
|
|
@@ -9,7 +11,7 @@ module Devise
|
|
9
11
|
source_root File.expand_path("../../templates", __FILE__)
|
10
12
|
|
11
13
|
desc "Creates a Devise initializer and copy locale files to your application."
|
12
|
-
class_option :orm
|
14
|
+
class_option :orm, required: true
|
13
15
|
|
14
16
|
def copy_initializer
|
15
17
|
unless options[:orm]
|
@@ -35,10 +37,6 @@ module Devise
|
|
35
37
|
def show_readme
|
36
38
|
readme "README" if behavior == :invoke
|
37
39
|
end
|
38
|
-
|
39
|
-
def rails_4?
|
40
|
-
Rails::VERSION::MAJOR == 4
|
41
|
-
end
|
42
40
|
end
|
43
41
|
end
|
44
42
|
end
|
@@ -1,12 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Devise
|
2
4
|
module Generators
|
3
5
|
module OrmHelpers
|
4
6
|
def model_contents
|
5
7
|
buffer = <<-CONTENT
|
6
8
|
# Include default devise modules. Others available are:
|
7
|
-
# :confirmable, :lockable, :timeoutable and :omniauthable
|
9
|
+
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
|
8
10
|
devise :database_authenticatable, :registerable,
|
9
|
-
:recoverable, :rememberable, :
|
11
|
+
:recoverable, :rememberable, :validatable
|
10
12
|
|
11
13
|
CONTENT
|
12
14
|
buffer
|
@@ -23,7 +25,11 @@ CONTENT
|
|
23
25
|
end
|
24
26
|
|
25
27
|
def migration_path
|
26
|
-
|
28
|
+
if Rails.version >= '5.0.3'
|
29
|
+
db_migrate_path
|
30
|
+
else
|
31
|
+
@migration_path ||= File.join("db", "migrate")
|
32
|
+
end
|
27
33
|
end
|
28
34
|
|
29
35
|
def model_path
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails/generators/base'
|
2
4
|
|
3
5
|
module Devise
|
@@ -21,13 +23,6 @@ module Devise
|
|
21
23
|
public_task :copy_views
|
22
24
|
end
|
23
25
|
|
24
|
-
# TODO: Add this to Rails itself
|
25
|
-
module ClassMethods
|
26
|
-
def hide!
|
27
|
-
Rails::Generators.hide_namespace self.namespace
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
26
|
def copy_views
|
32
27
|
if options[:views]
|
33
28
|
options[:views].each do |directory|
|
@@ -47,7 +42,7 @@ module Devise
|
|
47
42
|
def view_directory(name, _target_path = nil)
|
48
43
|
directory name.to_s, _target_path || "#{target_path}/#{name}" do |content|
|
49
44
|
if scope
|
50
|
-
content.gsub
|
45
|
+
content.gsub("devise/shared", "#{plural_scope}/shared")
|
51
46
|
else
|
52
47
|
content
|
53
48
|
end
|
@@ -139,7 +134,11 @@ module Devise
|
|
139
134
|
default: defined?(SimpleForm) ? "simple_form_for" : "form_for"
|
140
135
|
|
141
136
|
hook_for :markerb, desc: "Generate markerb instead of erb mail views",
|
142
|
-
default: defined?(Markerb)
|
137
|
+
default: defined?(Markerb),
|
138
|
+
type: :boolean
|
139
|
+
|
140
|
+
hook_for :erb, desc: "Generate erb mail views",
|
141
|
+
default: !defined?(Markerb),
|
143
142
|
type: :boolean
|
144
143
|
end
|
145
144
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rails/generators/named_base'
|
2
4
|
require 'generators/devise/orm_helpers'
|
3
5
|
|
@@ -32,11 +34,11 @@ module Mongoid
|
|
32
34
|
field :remember_created_at, type: Time
|
33
35
|
|
34
36
|
## Trackable
|
35
|
-
field :sign_in_count, type: Integer, default: 0
|
36
|
-
field :current_sign_in_at, type: Time
|
37
|
-
field :last_sign_in_at, type: Time
|
38
|
-
field :current_sign_in_ip, type: String
|
39
|
-
field :last_sign_in_ip, type: String
|
37
|
+
# field :sign_in_count, type: Integer, default: 0
|
38
|
+
# field :current_sign_in_at, type: Time
|
39
|
+
# field :last_sign_in_at, type: Time
|
40
|
+
# field :current_sign_in_ip, type: String
|
41
|
+
# field :last_sign_in_ip, type: String
|
40
42
|
|
41
43
|
## Confirmable
|
42
44
|
# field :confirmation_token, type: String
|
@@ -1,6 +1,6 @@
|
|
1
1
|
===============================================================================
|
2
2
|
|
3
|
-
|
3
|
+
Depending on your application's configuration some manual setup may be required:
|
4
4
|
|
5
5
|
1. Ensure you have defined default url options in your environments files. Here
|
6
6
|
is an example of default_url_options appropriate for a development environment
|
@@ -10,10 +10,14 @@ Some setup you must do manually if you haven't yet:
|
|
10
10
|
|
11
11
|
In production, :host should be set to the actual host of your application.
|
12
12
|
|
13
|
+
* Required for all applications. *
|
14
|
+
|
13
15
|
2. Ensure you have defined root_url to *something* in your config/routes.rb.
|
14
16
|
For example:
|
15
17
|
|
16
18
|
root to: "home#index"
|
19
|
+
|
20
|
+
* Not required for API-only Applications *
|
17
21
|
|
18
22
|
3. Ensure you have flash messages in app/views/layouts/application.html.erb.
|
19
23
|
For example:
|
@@ -21,8 +25,12 @@ Some setup you must do manually if you haven't yet:
|
|
21
25
|
<p class="notice"><%= notice %></p>
|
22
26
|
<p class="alert"><%= alert %></p>
|
23
27
|
|
28
|
+
* Not required for API-only Applications *
|
29
|
+
|
24
30
|
4. You can copy Devise views (for customization) to your app by running:
|
25
31
|
|
26
32
|
rails g devise:views
|
33
|
+
|
34
|
+
* Not required *
|
27
35
|
|
28
36
|
===============================================================================
|