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,25 +1,25 @@
|
|
|
1
1
|
<%- if controller_name != 'sessions' %>
|
|
2
2
|
<%= link_to "Log in", new_session_path(resource_name) %><br />
|
|
3
|
-
<% end
|
|
3
|
+
<% end %>
|
|
4
4
|
|
|
5
5
|
<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
|
|
6
6
|
<%= link_to "Sign up", new_registration_path(resource_name) %><br />
|
|
7
|
-
<% end
|
|
7
|
+
<% end %>
|
|
8
8
|
|
|
9
9
|
<%- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %>
|
|
10
10
|
<%= link_to "Forgot your password?", new_password_path(resource_name) %><br />
|
|
11
|
-
<% end
|
|
11
|
+
<% end %>
|
|
12
12
|
|
|
13
13
|
<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
|
|
14
14
|
<%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %><br />
|
|
15
|
-
<% end
|
|
15
|
+
<% end %>
|
|
16
16
|
|
|
17
17
|
<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
|
|
18
18
|
<%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br />
|
|
19
|
-
<% end
|
|
19
|
+
<% end %>
|
|
20
20
|
|
|
21
21
|
<%- if devise_mapping.omniauthable? %>
|
|
22
22
|
<%- resource_class.omniauth_providers.each do |provider| %>
|
|
23
|
-
<%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider) %><br />
|
|
24
|
-
<% end
|
|
25
|
-
<% end
|
|
23
|
+
<%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider), method: :post %><br />
|
|
24
|
+
<% end %>
|
|
25
|
+
<% end %>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<h2>Resend unlock instructions</h2>
|
|
2
2
|
|
|
3
3
|
<%= form_for(resource, as: resource_name, url: unlock_path(resource_name), html: { method: :post }) do |f| %>
|
|
4
|
-
<%=
|
|
4
|
+
<%= render "devise/shared/error_messages", resource: resource %>
|
|
5
5
|
|
|
6
6
|
<div class="field">
|
|
7
7
|
<%= f.label :email %><br />
|
|
8
|
-
<%= f.email_field :email, autofocus: true %>
|
|
8
|
+
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
|
|
9
9
|
</div>
|
|
10
10
|
|
|
11
11
|
<div class="actions">
|
data/config/locales/en.yml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Additional translations at https://github.com/
|
|
1
|
+
# Additional translations at https://github.com/heartcombo/devise/wiki/I18n
|
|
2
2
|
|
|
3
3
|
en:
|
|
4
4
|
devise:
|
|
@@ -23,6 +23,8 @@ en:
|
|
|
23
23
|
subject: "Reset password instructions"
|
|
24
24
|
unlock_instructions:
|
|
25
25
|
subject: "Unlock instructions"
|
|
26
|
+
email_changed:
|
|
27
|
+
subject: "Email Changed"
|
|
26
28
|
password_change:
|
|
27
29
|
subject: "Password Changed"
|
|
28
30
|
omniauth_callbacks:
|
|
@@ -40,8 +42,9 @@ en:
|
|
|
40
42
|
signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated."
|
|
41
43
|
signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked."
|
|
42
44
|
signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account."
|
|
43
|
-
update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the
|
|
45
|
+
update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirmation link to confirm your new email address."
|
|
44
46
|
updated: "Your account has been updated successfully."
|
|
47
|
+
updated_but_not_signed_in: "Your account has been updated successfully, but since your password was changed, you need to sign in again."
|
|
45
48
|
sessions:
|
|
46
49
|
signed_in: "Signed in successfully."
|
|
47
50
|
signed_out: "Signed out successfully."
|
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'
|
|
@@ -16,6 +18,7 @@ module Devise
|
|
|
16
18
|
autoload :TestHelpers, 'devise/test_helpers'
|
|
17
19
|
autoload :TimeInflector, 'devise/time_inflector'
|
|
18
20
|
autoload :TokenGenerator, 'devise/token_generator'
|
|
21
|
+
autoload :SecretKeyFinder, 'devise/secret_key_finder'
|
|
19
22
|
|
|
20
23
|
module Controllers
|
|
21
24
|
autoload :Helpers, 'devise/controllers/helpers'
|
|
@@ -39,13 +42,18 @@ module Devise
|
|
|
39
42
|
autoload :Authenticatable, 'devise/strategies/authenticatable'
|
|
40
43
|
end
|
|
41
44
|
|
|
45
|
+
module Test
|
|
46
|
+
autoload :ControllerHelpers, 'devise/test/controller_helpers'
|
|
47
|
+
autoload :IntegrationHelpers, 'devise/test/integration_helpers'
|
|
48
|
+
end
|
|
49
|
+
|
|
42
50
|
# Constants which holds devise configuration for extensions. Those should
|
|
43
51
|
# not be modified by the "end user" (this is why they are constants).
|
|
44
52
|
ALL = []
|
|
45
|
-
CONTROLLERS =
|
|
46
|
-
ROUTES =
|
|
47
|
-
STRATEGIES =
|
|
48
|
-
URL_HELPERS =
|
|
53
|
+
CONTROLLERS = {}
|
|
54
|
+
ROUTES = {}
|
|
55
|
+
STRATEGIES = {}
|
|
56
|
+
URL_HELPERS = {}
|
|
49
57
|
|
|
50
58
|
# Strategies that do not require user input.
|
|
51
59
|
NO_INPUT = []
|
|
@@ -63,7 +71,7 @@ module Devise
|
|
|
63
71
|
|
|
64
72
|
# The number of times to hash the password.
|
|
65
73
|
mattr_accessor :stretches
|
|
66
|
-
@@stretches =
|
|
74
|
+
@@stretches = 12
|
|
67
75
|
|
|
68
76
|
# The default key used when authenticating over http auth.
|
|
69
77
|
mattr_accessor :http_authentication_key
|
|
@@ -144,11 +152,15 @@ module Devise
|
|
|
144
152
|
mattr_accessor :timeout_in
|
|
145
153
|
@@timeout_in = 30.minutes
|
|
146
154
|
|
|
147
|
-
# Used to hash the password. Please generate one with
|
|
155
|
+
# Used to hash the password. Please generate one with rails secret.
|
|
148
156
|
mattr_accessor :pepper
|
|
149
157
|
@@pepper = nil
|
|
150
158
|
|
|
151
|
-
# Used to
|
|
159
|
+
# Used to send notification to the original user email when their email is changed.
|
|
160
|
+
mattr_accessor :send_email_changed_notification
|
|
161
|
+
@@send_email_changed_notification = false
|
|
162
|
+
|
|
163
|
+
# Used to enable sending notification to user when their password is changed.
|
|
152
164
|
mattr_accessor :send_password_change_notification
|
|
153
165
|
@@send_password_change_notification = false
|
|
154
166
|
|
|
@@ -242,15 +254,22 @@ module Devise
|
|
|
242
254
|
mattr_accessor :clean_up_csrf_token_on_authentication
|
|
243
255
|
@@clean_up_csrf_token_on_authentication = true
|
|
244
256
|
|
|
257
|
+
# When false, Devise will not attempt to reload routes on eager load.
|
|
258
|
+
# This can reduce the time taken to boot the app but if your application
|
|
259
|
+
# requires the Devise mappings to be loaded during boot time the application
|
|
260
|
+
# won't boot properly.
|
|
261
|
+
mattr_accessor :reload_routes
|
|
262
|
+
@@reload_routes = true
|
|
263
|
+
|
|
245
264
|
# PRIVATE CONFIGURATION
|
|
246
265
|
|
|
247
266
|
# Store scopes mappings.
|
|
248
267
|
mattr_reader :mappings
|
|
249
|
-
@@mappings =
|
|
268
|
+
@@mappings = {}
|
|
250
269
|
|
|
251
270
|
# OmniAuth configurations.
|
|
252
271
|
mattr_reader :omniauth_configs
|
|
253
|
-
@@omniauth_configs =
|
|
272
|
+
@@omniauth_configs = {}
|
|
254
273
|
|
|
255
274
|
# Define a set of modules that are called when a mapping is added.
|
|
256
275
|
mattr_reader :helpers
|
|
@@ -274,6 +293,14 @@ module Devise
|
|
|
274
293
|
mattr_accessor :token_generator
|
|
275
294
|
@@token_generator = nil
|
|
276
295
|
|
|
296
|
+
# When set to false, changing a password does not automatically sign in a user
|
|
297
|
+
mattr_accessor :sign_in_after_change_password
|
|
298
|
+
@@sign_in_after_change_password = true
|
|
299
|
+
|
|
300
|
+
def self.activerecord51? # :nodoc:
|
|
301
|
+
defined?(ActiveRecord) && ActiveRecord.gem_version >= Gem::Version.new("5.1.x")
|
|
302
|
+
end
|
|
303
|
+
|
|
277
304
|
# Default way to set up Devise. Run rails generate devise_install to create
|
|
278
305
|
# a fresh initializer with all configuration values.
|
|
279
306
|
def self.setup
|
|
@@ -281,7 +308,7 @@ module Devise
|
|
|
281
308
|
end
|
|
282
309
|
|
|
283
310
|
class Getter
|
|
284
|
-
def initialize
|
|
311
|
+
def initialize(name)
|
|
285
312
|
@name = name
|
|
286
313
|
end
|
|
287
314
|
|
|
@@ -291,12 +318,8 @@ module Devise
|
|
|
291
318
|
end
|
|
292
319
|
|
|
293
320
|
def self.ref(arg)
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
Getter.new(arg)
|
|
297
|
-
else
|
|
298
|
-
ActiveSupport::Dependencies.ref(arg)
|
|
299
|
-
end
|
|
321
|
+
ActiveSupport::Dependencies.reference(arg)
|
|
322
|
+
Getter.new(arg)
|
|
300
323
|
end
|
|
301
324
|
|
|
302
325
|
def self.available_router_name
|
|
@@ -417,7 +440,6 @@ module Devise
|
|
|
417
440
|
# config.omniauth :github, APP_ID, APP_SECRET
|
|
418
441
|
#
|
|
419
442
|
def self.omniauth(provider, *args)
|
|
420
|
-
@@helpers << Devise::OmniAuth::UrlHelpers
|
|
421
443
|
config = Devise::OmniAuth::Config.new(provider, args)
|
|
422
444
|
@@omniauth_configs[config.strategy_name.to_sym] = config
|
|
423
445
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Devise
|
|
2
4
|
module Controllers
|
|
3
5
|
# Those helpers are convenience methods added to ApplicationController.
|
|
@@ -34,14 +36,14 @@ module Devise
|
|
|
34
36
|
# before_action ->{ authenticate_blogger! :admin } # Redirects to the admin login page
|
|
35
37
|
# current_blogger :user # Preferably returns a User if one is signed in
|
|
36
38
|
#
|
|
37
|
-
def devise_group(group_name, opts={})
|
|
39
|
+
def devise_group(group_name, opts = {})
|
|
38
40
|
mappings = "[#{ opts[:contains].map { |m| ":#{m}" }.join(',') }]"
|
|
39
41
|
|
|
40
42
|
class_eval <<-METHODS, __FILE__, __LINE__ + 1
|
|
41
|
-
def authenticate_#{group_name}!(
|
|
43
|
+
def authenticate_#{group_name}!(favorite = nil, opts = {})
|
|
42
44
|
unless #{group_name}_signed_in?
|
|
43
45
|
mappings = #{mappings}
|
|
44
|
-
mappings.unshift mappings.delete(
|
|
46
|
+
mappings.unshift mappings.delete(favorite.to_sym) if favorite
|
|
45
47
|
mappings.each do |mapping|
|
|
46
48
|
opts[:scope] = mapping
|
|
47
49
|
warden.authenticate!(opts) if !devise_controller? || opts.delete(:force)
|
|
@@ -55,9 +57,9 @@ module Devise
|
|
|
55
57
|
end
|
|
56
58
|
end
|
|
57
59
|
|
|
58
|
-
def current_#{group_name}(
|
|
60
|
+
def current_#{group_name}(favorite = nil)
|
|
59
61
|
mappings = #{mappings}
|
|
60
|
-
mappings.unshift mappings.delete(
|
|
62
|
+
mappings.unshift mappings.delete(favorite.to_sym) if favorite
|
|
61
63
|
mappings.each do |mapping|
|
|
62
64
|
current = warden.authenticate(scope: mapping)
|
|
63
65
|
return current if current
|
|
@@ -111,7 +113,7 @@ module Devise
|
|
|
111
113
|
mapping = mapping.name
|
|
112
114
|
|
|
113
115
|
class_eval <<-METHODS, __FILE__, __LINE__ + 1
|
|
114
|
-
def authenticate_#{mapping}!(opts={})
|
|
116
|
+
def authenticate_#{mapping}!(opts = {})
|
|
115
117
|
opts[:scope] = :#{mapping}
|
|
116
118
|
warden.authenticate!(opts) if !devise_controller? || opts.delete(:force)
|
|
117
119
|
end
|
|
@@ -138,7 +140,7 @@ module Devise
|
|
|
138
140
|
|
|
139
141
|
# The main accessor for the warden proxy instance
|
|
140
142
|
def warden
|
|
141
|
-
request.env['warden']
|
|
143
|
+
request.env['warden'] or raise MissingWarden
|
|
142
144
|
end
|
|
143
145
|
|
|
144
146
|
# Return true if it's a devise_controller. false to all controllers unless
|
|
@@ -250,7 +252,7 @@ module Devise
|
|
|
250
252
|
# Overwrite Rails' handle unverified request to sign out all scopes,
|
|
251
253
|
# clear run strategies and remove cached variables.
|
|
252
254
|
def handle_unverified_request
|
|
253
|
-
super # call the default
|
|
255
|
+
super # call the default behavior which resets/nullifies/raises
|
|
254
256
|
request.env["devise.skip_storage"] = true
|
|
255
257
|
sign_out_all_scopes(false)
|
|
256
258
|
end
|
|
@@ -266,7 +268,7 @@ module Devise
|
|
|
266
268
|
# Check if flash messages should be emitted. Default is to do it on
|
|
267
269
|
# navigational formats
|
|
268
270
|
def is_flashing_format?
|
|
269
|
-
is_navigational_format?
|
|
271
|
+
request.respond_to?(:flash) && is_navigational_format?
|
|
270
272
|
end
|
|
271
273
|
|
|
272
274
|
private
|
|
@@ -277,4 +279,15 @@ module Devise
|
|
|
277
279
|
end
|
|
278
280
|
end
|
|
279
281
|
end
|
|
282
|
+
|
|
283
|
+
class MissingWarden < StandardError
|
|
284
|
+
def initialize
|
|
285
|
+
super "Devise could not find the `Warden::Proxy` instance on your request environment.\n" + \
|
|
286
|
+
"Make sure that your application is loading Devise and Warden as expected and that " + \
|
|
287
|
+
"the `Warden::Manager` middleware is present in your middleware stack.\n" + \
|
|
288
|
+
"If you are seeing this on one of your tests, ensure that your tests are either " + \
|
|
289
|
+
"executing the Rails middleware stack or that your tests are using the `Devise::Test::ControllerHelpers` " + \
|
|
290
|
+
"module to inject the `request.env['warden']` object for you."
|
|
291
|
+
end
|
|
292
|
+
end
|
|
280
293
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Devise
|
|
2
4
|
module Controllers
|
|
3
5
|
# A module that may be optionally included in a controller in order
|
|
@@ -18,7 +20,7 @@ module Devise
|
|
|
18
20
|
|
|
19
21
|
# Remembers the given resource by setting up a cookie
|
|
20
22
|
def remember_me(resource)
|
|
21
|
-
return if env["devise.skip_storage"]
|
|
23
|
+
return if request.env["devise.skip_storage"]
|
|
22
24
|
scope = Devise::Mapping.find_scope!(resource)
|
|
23
25
|
resource.remember_me!
|
|
24
26
|
cookies.signed[remember_key(resource, scope)] = remember_cookie_values(resource)
|
|
@@ -1,31 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Devise
|
|
2
4
|
module Controllers
|
|
3
5
|
# Provide sign in and sign out functionality.
|
|
4
6
|
# Included by default in all controllers.
|
|
5
7
|
module SignInOut
|
|
6
8
|
# Return true if the given scope is signed in session. If no scope given, return
|
|
7
|
-
# true if any scope is signed in.
|
|
8
|
-
|
|
9
|
+
# true if any scope is signed in. This will run authentication hooks, which may
|
|
10
|
+
# cause exceptions to be thrown from this method; if you simply want to check
|
|
11
|
+
# if a scope has already previously been authenticated without running
|
|
12
|
+
# authentication hooks, you can directly call `warden.authenticated?(scope: scope)`
|
|
13
|
+
def signed_in?(scope = nil)
|
|
9
14
|
[scope || Devise.mappings.keys].flatten.any? do |_scope|
|
|
10
15
|
warden.authenticate?(scope: _scope)
|
|
11
16
|
end
|
|
12
17
|
end
|
|
13
18
|
|
|
14
19
|
# Sign in a user that already was authenticated. This helper is useful for logging
|
|
15
|
-
# users in after sign up.
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
# signed in, but we want to refresh the credentials in session.
|
|
20
|
+
# users in after sign up. All options given to sign_in is passed forward
|
|
21
|
+
# to the set_user method in warden.
|
|
22
|
+
# If you are using a custom warden strategy and the timeoutable module, you have to
|
|
23
|
+
# set `env["devise.skip_timeout"] = true` in the request to use this method, like we do
|
|
24
|
+
# in the sessions controller: https://github.com/heartcombo/devise/blob/master/app/controllers/devise/sessions_controller.rb#L7
|
|
21
25
|
#
|
|
22
26
|
# Examples:
|
|
23
27
|
#
|
|
24
28
|
# sign_in :user, @user # sign_in(scope, resource)
|
|
25
29
|
# sign_in @user # sign_in(resource)
|
|
26
|
-
# sign_in @user, event: :authentication
|
|
27
|
-
# sign_in @user, store: false
|
|
28
|
-
# sign_in @user, bypass: true # sign_in(resource, options)
|
|
30
|
+
# sign_in @user, event: :authentication # sign_in(resource, options)
|
|
31
|
+
# sign_in @user, store: false # sign_in(resource, options)
|
|
29
32
|
#
|
|
30
33
|
def sign_in(resource_or_scope, *args)
|
|
31
34
|
options = args.extract_options!
|
|
@@ -35,6 +38,13 @@ module Devise
|
|
|
35
38
|
expire_data_after_sign_in!
|
|
36
39
|
|
|
37
40
|
if options[:bypass]
|
|
41
|
+
ActiveSupport::Deprecation.warn(<<-DEPRECATION.strip_heredoc, caller)
|
|
42
|
+
[Devise] bypass option is deprecated and it will be removed in future version of Devise.
|
|
43
|
+
Please use bypass_sign_in method instead.
|
|
44
|
+
Example:
|
|
45
|
+
|
|
46
|
+
bypass_sign_in(user)
|
|
47
|
+
DEPRECATION
|
|
38
48
|
warden.session_serializer.store(resource, scope)
|
|
39
49
|
elsif warden.user(scope) == resource && !options.delete(:force)
|
|
40
50
|
# Do nothing. User already signed in and we are not forcing it.
|
|
@@ -44,6 +54,20 @@ module Devise
|
|
|
44
54
|
end
|
|
45
55
|
end
|
|
46
56
|
|
|
57
|
+
# Sign in a user bypassing the warden callbacks and stores the user
|
|
58
|
+
# straight in session. This option is useful in cases the user is already
|
|
59
|
+
# signed in, but we want to refresh the credentials in session.
|
|
60
|
+
#
|
|
61
|
+
# Examples:
|
|
62
|
+
#
|
|
63
|
+
# bypass_sign_in @user, scope: :user
|
|
64
|
+
# bypass_sign_in @user
|
|
65
|
+
def bypass_sign_in(resource, scope: nil)
|
|
66
|
+
scope ||= Devise::Mapping.find_scope!(resource)
|
|
67
|
+
expire_data_after_sign_in!
|
|
68
|
+
warden.session_serializer.store(resource, scope)
|
|
69
|
+
end
|
|
70
|
+
|
|
47
71
|
# Sign out a given user or scope. This helper is useful for signing out a user
|
|
48
72
|
# after deleting accounts. Returns true if there was a logout and false if there
|
|
49
73
|
# is no user logged in on the referred scope
|
|
@@ -53,12 +77,11 @@ module Devise
|
|
|
53
77
|
# sign_out :user # sign_out(scope)
|
|
54
78
|
# sign_out @user # sign_out(resource)
|
|
55
79
|
#
|
|
56
|
-
def sign_out(resource_or_scope=nil)
|
|
80
|
+
def sign_out(resource_or_scope = nil)
|
|
57
81
|
return sign_out_all_scopes unless resource_or_scope
|
|
58
82
|
scope = Devise::Mapping.find_scope!(resource_or_scope)
|
|
59
83
|
user = warden.user(scope: scope, run_callbacks: false) # If there is no user
|
|
60
84
|
|
|
61
|
-
warden.raw_session.inspect # Without this inspect here. The session does not clear.
|
|
62
85
|
warden.logout(scope)
|
|
63
86
|
warden.clear_strategies_cache!(scope: scope)
|
|
64
87
|
instance_variable_set(:"@current_#{scope}", nil)
|
|
@@ -69,7 +92,7 @@ module Devise
|
|
|
69
92
|
# Sign out all active users or scopes. This helper is useful for signing out all roles
|
|
70
93
|
# in one click. This signs out ALL scopes in warden. Returns true if there was at least one logout
|
|
71
94
|
# and false if there was no user logged in on all scopes.
|
|
72
|
-
def sign_out_all_scopes(lock=true)
|
|
95
|
+
def sign_out_all_scopes(lock = true)
|
|
73
96
|
users = Devise.mappings.keys.map { |s| warden.user(scope: s, run_callbacks: false) }
|
|
74
97
|
|
|
75
98
|
warden.logout
|
|
@@ -83,10 +106,12 @@ module Devise
|
|
|
83
106
|
private
|
|
84
107
|
|
|
85
108
|
def expire_data_after_sign_in!
|
|
109
|
+
# TODO: remove once Rails 5.2+ and forward are only supported.
|
|
86
110
|
# session.keys will return an empty array if the session is not yet loaded.
|
|
87
111
|
# This is a bug in both Rack and Rails.
|
|
88
112
|
# A call to #empty? forces the session to be loaded.
|
|
89
113
|
session.empty?
|
|
114
|
+
|
|
90
115
|
session.keys.grep(/^devise\./).each { |k| session.delete(k) }
|
|
91
116
|
end
|
|
92
117
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require "uri"
|
|
2
4
|
|
|
3
5
|
module Devise
|
|
@@ -29,16 +31,13 @@ module Devise
|
|
|
29
31
|
# Example:
|
|
30
32
|
#
|
|
31
33
|
# store_location_for(:user, dashboard_path)
|
|
32
|
-
# redirect_to
|
|
34
|
+
# redirect_to user_facebook_omniauth_authorize_path
|
|
33
35
|
#
|
|
34
36
|
def store_location_for(resource_or_scope, location)
|
|
35
37
|
session_key = stored_location_key_for(resource_or_scope)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
path = [path, uri.fragment].compact.join('#')
|
|
40
|
-
session[session_key] = path
|
|
41
|
-
end
|
|
38
|
+
|
|
39
|
+
path = extract_path_from_location(location)
|
|
40
|
+
session[session_key] = path if path
|
|
42
41
|
end
|
|
43
42
|
|
|
44
43
|
private
|
|
@@ -53,6 +52,25 @@ module Devise
|
|
|
53
52
|
scope = Devise::Mapping.find_scope!(resource_or_scope)
|
|
54
53
|
"#{scope}_return_to"
|
|
55
54
|
end
|
|
55
|
+
|
|
56
|
+
def extract_path_from_location(location)
|
|
57
|
+
uri = parse_uri(location)
|
|
58
|
+
|
|
59
|
+
if uri
|
|
60
|
+
path = remove_domain_from_uri(uri)
|
|
61
|
+
path = add_fragment_back_to_path(uri, path)
|
|
62
|
+
|
|
63
|
+
path
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def remove_domain_from_uri(uri)
|
|
68
|
+
[uri.path.sub(/\A\/+/, '/'), uri.query].compact.join('?')
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def add_fragment_back_to_path(uri, path)
|
|
72
|
+
[path, uri.fragment].compact.join('#')
|
|
73
|
+
end
|
|
56
74
|
end
|
|
57
75
|
end
|
|
58
76
|
end
|