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,26 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
class Devise::OmniauthCallbacksController < DeviseController
|
|
2
4
|
prepend_before_action { request.env["devise.skip_timeout"] = true }
|
|
3
5
|
|
|
4
6
|
def passthru
|
|
5
|
-
render status: 404,
|
|
7
|
+
render status: 404, plain: "Not found. Authentication passthru."
|
|
6
8
|
end
|
|
7
9
|
|
|
8
10
|
def failure
|
|
9
|
-
set_flash_message :alert, :failure, kind: OmniAuth::Utils.camelize(failed_strategy.name), reason: failure_message
|
|
11
|
+
set_flash_message! :alert, :failure, kind: OmniAuth::Utils.camelize(failed_strategy.name), reason: failure_message
|
|
10
12
|
redirect_to after_omniauth_failure_path_for(resource_name)
|
|
11
13
|
end
|
|
12
14
|
|
|
13
15
|
protected
|
|
14
16
|
|
|
15
17
|
def failed_strategy
|
|
16
|
-
request.respond_to?(:get_header) ? request.get_header("omniauth.error.strategy") : env["omniauth.error.strategy"]
|
|
18
|
+
request.respond_to?(:get_header) ? request.get_header("omniauth.error.strategy") : request.env["omniauth.error.strategy"]
|
|
17
19
|
end
|
|
18
20
|
|
|
19
21
|
def failure_message
|
|
20
|
-
exception = request.respond_to?(:get_header) ? request.get_header("omniauth.error") : env["omniauth.error"]
|
|
22
|
+
exception = request.respond_to?(:get_header) ? request.get_header("omniauth.error") : request.env["omniauth.error"]
|
|
21
23
|
error = exception.error_reason if exception.respond_to?(:error_reason)
|
|
22
24
|
error ||= exception.error if exception.respond_to?(:error)
|
|
23
|
-
error ||= (request.respond_to?(:get_header) ? request.get_header("omniauth.error.type") : env["omniauth.error.type"]).to_s
|
|
25
|
+
error ||= (request.respond_to?(:get_header) ? request.get_header("omniauth.error.type") : request.env["omniauth.error.type"]).to_s
|
|
24
26
|
error.to_s.humanize if error
|
|
25
27
|
end
|
|
26
28
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
class Devise::PasswordsController < DeviseController
|
|
2
4
|
prepend_before_action :require_no_authentication
|
|
3
5
|
# Render the #edit only if coming from a reset password email link
|
|
@@ -37,6 +39,7 @@ class Devise::PasswordsController < DeviseController
|
|
|
37
39
|
if Devise.sign_in_after_reset_password
|
|
38
40
|
flash_message = resource.active_for_authentication? ? :updated : :updated_not_active
|
|
39
41
|
set_flash_message!(:notice, flash_message)
|
|
42
|
+
resource.after_database_authentication
|
|
40
43
|
sign_in(resource_name, resource)
|
|
41
44
|
else
|
|
42
45
|
set_flash_message!(:notice, :updated_not_active)
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
class Devise::RegistrationsController < DeviseController
|
|
2
4
|
prepend_before_action :require_no_authentication, only: [:new, :create, :cancel]
|
|
3
5
|
prepend_before_action :authenticate_scope!, only: [:edit, :update, :destroy]
|
|
6
|
+
prepend_before_action :set_minimum_password_length, only: [:new, :edit]
|
|
4
7
|
|
|
5
8
|
# GET /resource/sign_up
|
|
6
9
|
def new
|
|
7
|
-
build_resource
|
|
8
|
-
set_minimum_password_length
|
|
10
|
+
build_resource
|
|
9
11
|
yield resource if block_given?
|
|
10
|
-
respond_with
|
|
12
|
+
respond_with resource
|
|
11
13
|
end
|
|
12
14
|
|
|
13
15
|
# POST /resource
|
|
@@ -48,15 +50,13 @@ class Devise::RegistrationsController < DeviseController
|
|
|
48
50
|
resource_updated = update_resource(resource, account_update_params)
|
|
49
51
|
yield resource if block_given?
|
|
50
52
|
if resource_updated
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
set_flash_message :notice, flash_key
|
|
55
|
-
end
|
|
56
|
-
sign_in resource_name, resource, bypass: true
|
|
53
|
+
set_flash_message_for_update(resource, prev_unconfirmed_email)
|
|
54
|
+
bypass_sign_in resource, scope: resource_name if sign_in_after_change_password?
|
|
55
|
+
|
|
57
56
|
respond_with resource, location: after_update_path_for(resource)
|
|
58
57
|
else
|
|
59
58
|
clean_up_passwords resource
|
|
59
|
+
set_minimum_password_length
|
|
60
60
|
respond_with resource
|
|
61
61
|
end
|
|
62
62
|
end
|
|
@@ -96,8 +96,8 @@ class Devise::RegistrationsController < DeviseController
|
|
|
96
96
|
|
|
97
97
|
# Build a devise resource passing in the session. Useful to move
|
|
98
98
|
# temporary session data to the newly created user.
|
|
99
|
-
def build_resource(hash=
|
|
100
|
-
self.resource = resource_class.new_with_session(hash
|
|
99
|
+
def build_resource(hash = {})
|
|
100
|
+
self.resource = resource_class.new_with_session(hash, session)
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
# Signs in a user on sign up. You can overwrite this method in your own
|
|
@@ -109,7 +109,7 @@ class Devise::RegistrationsController < DeviseController
|
|
|
109
109
|
# The path used after sign up. You need to overwrite this method
|
|
110
110
|
# in your own RegistrationsController.
|
|
111
111
|
def after_sign_up_path_for(resource)
|
|
112
|
-
after_sign_in_path_for(resource)
|
|
112
|
+
after_sign_in_path_for(resource) if is_navigational_format?
|
|
113
113
|
end
|
|
114
114
|
|
|
115
115
|
# The path used after sign up for inactive accounts. You need to overwrite
|
|
@@ -124,7 +124,7 @@ class Devise::RegistrationsController < DeviseController
|
|
|
124
124
|
# The default url to be used after updating a resource. You need to overwrite
|
|
125
125
|
# this method in your own RegistrationsController.
|
|
126
126
|
def after_update_path_for(resource)
|
|
127
|
-
signed_in_root_path(resource)
|
|
127
|
+
sign_in_after_change_password? ? signed_in_root_path(resource) : new_session_path(resource_name)
|
|
128
128
|
end
|
|
129
129
|
|
|
130
130
|
# Authenticates the current scope and gets the current resource from the session.
|
|
@@ -144,4 +144,25 @@ class Devise::RegistrationsController < DeviseController
|
|
|
144
144
|
def translation_scope
|
|
145
145
|
'devise.registrations'
|
|
146
146
|
end
|
|
147
|
+
|
|
148
|
+
private
|
|
149
|
+
|
|
150
|
+
def set_flash_message_for_update(resource, prev_unconfirmed_email)
|
|
151
|
+
return unless is_flashing_format?
|
|
152
|
+
|
|
153
|
+
flash_key = if update_needs_confirmation?(resource, prev_unconfirmed_email)
|
|
154
|
+
:update_needs_confirmation
|
|
155
|
+
elsif sign_in_after_change_password?
|
|
156
|
+
:updated
|
|
157
|
+
else
|
|
158
|
+
:updated_but_not_signed_in
|
|
159
|
+
end
|
|
160
|
+
set_flash_message :notice, flash_key
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def sign_in_after_change_password?
|
|
164
|
+
return true if account_update_params[:password].blank?
|
|
165
|
+
|
|
166
|
+
Devise.sign_in_after_change_password
|
|
167
|
+
end
|
|
147
168
|
end
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
class Devise::SessionsController < DeviseController
|
|
2
4
|
prepend_before_action :require_no_authentication, only: [:new, :create]
|
|
3
5
|
prepend_before_action :allow_params_authentication!, only: :create
|
|
4
6
|
prepend_before_action :verify_signed_out_user, only: :destroy
|
|
5
|
-
prepend_before_action
|
|
7
|
+
prepend_before_action(only: [:create, :destroy]) { request.env["devise.skip_timeout"] = true }
|
|
6
8
|
|
|
7
9
|
# GET /resource/sign_in
|
|
8
10
|
def new
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
# All Devise controllers are inherited from here.
|
|
2
4
|
class DeviseController < Devise.parent_controller.constantize
|
|
3
5
|
include Devise::Controllers::ScopedViews
|
|
@@ -20,7 +22,7 @@ class DeviseController < Devise.parent_controller.constantize
|
|
|
20
22
|
# Action Controller tests that forces _prefixes to be
|
|
21
23
|
# loaded before even having a request object.
|
|
22
24
|
#
|
|
23
|
-
# This method should be public as it is
|
|
25
|
+
# This method should be public as it is in ActionPack
|
|
24
26
|
# itself. Changing its visibility may break other gems.
|
|
25
27
|
def _prefixes #:nodoc:
|
|
26
28
|
@_prefixes ||= if self.class.scoped_views? && request && devise_mapping
|
|
@@ -110,7 +112,7 @@ MESSAGE
|
|
|
110
112
|
end
|
|
111
113
|
|
|
112
114
|
if authenticated && resource = warden.user(resource_name)
|
|
113
|
-
|
|
115
|
+
set_flash_message(:alert, 'already_authenticated', scope: 'devise.failure')
|
|
114
116
|
redirect_to after_sign_in_path_for(resource)
|
|
115
117
|
end
|
|
116
118
|
end
|
|
@@ -182,7 +184,7 @@ MESSAGE
|
|
|
182
184
|
options[:default] = Array(options[:default]).unshift(kind.to_sym)
|
|
183
185
|
options[:resource_name] = resource_name
|
|
184
186
|
options = devise_i18n_options(options)
|
|
185
|
-
I18n.t("#{options[:resource_name]}.#{kind}", options)
|
|
187
|
+
I18n.t("#{options[:resource_name]}.#{kind}", **options)
|
|
186
188
|
end
|
|
187
189
|
|
|
188
190
|
# Controllers inheriting DeviseController are advised to override this
|
|
@@ -1,25 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module DeviseHelper
|
|
2
|
-
#
|
|
3
|
-
#
|
|
4
|
-
# copy the views to your application.
|
|
5
|
-
#
|
|
6
|
-
# This method is intended to stay simple and it is unlikely that we are going to change
|
|
7
|
-
# it to add more behavior or options.
|
|
4
|
+
# Retain this method for backwards compatibility, deprecated in favor of modifying the
|
|
5
|
+
# devise/shared/error_messages partial.
|
|
8
6
|
def devise_error_messages!
|
|
9
|
-
|
|
7
|
+
ActiveSupport::Deprecation.warn <<-DEPRECATION.strip_heredoc
|
|
8
|
+
[Devise] `DeviseHelper#devise_error_messages!` is deprecated and will be
|
|
9
|
+
removed in the next major version.
|
|
10
|
+
|
|
11
|
+
Devise now uses a partial under "devise/shared/error_messages" to display
|
|
12
|
+
error messages by default, and make them easier to customize. Update your
|
|
13
|
+
views changing calls from:
|
|
14
|
+
|
|
15
|
+
<%= devise_error_messages! %>
|
|
10
16
|
|
|
11
|
-
|
|
12
|
-
sentence = I18n.t("errors.messages.not_saved",
|
|
13
|
-
count: resource.errors.count,
|
|
14
|
-
resource: resource.class.model_name.human.downcase)
|
|
17
|
+
to:
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
<%= render "devise/shared/error_messages", resource: resource %>
|
|
20
|
+
|
|
21
|
+
To start customizing how errors are displayed, you can copy the partial
|
|
22
|
+
from devise to your `app/views` folder. Alternatively, you can run
|
|
23
|
+
`rails g devise:views` which will copy all of them again to your app.
|
|
24
|
+
DEPRECATION
|
|
25
|
+
|
|
26
|
+
return "" if resource.errors.empty?
|
|
22
27
|
|
|
23
|
-
|
|
28
|
+
render "devise/shared/error_messages", resource: resource
|
|
24
29
|
end
|
|
25
30
|
end
|
|
@@ -1,23 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
if defined?(ActionMailer)
|
|
2
4
|
class Devise::Mailer < Devise.parent_mailer.constantize
|
|
3
5
|
include Devise::Mailers::Helpers
|
|
4
6
|
|
|
5
|
-
def confirmation_instructions(record, token, opts={})
|
|
7
|
+
def confirmation_instructions(record, token, opts = {})
|
|
6
8
|
@token = token
|
|
7
9
|
devise_mail(record, :confirmation_instructions, opts)
|
|
8
10
|
end
|
|
9
11
|
|
|
10
|
-
def reset_password_instructions(record, token, opts={})
|
|
12
|
+
def reset_password_instructions(record, token, opts = {})
|
|
11
13
|
@token = token
|
|
12
14
|
devise_mail(record, :reset_password_instructions, opts)
|
|
13
15
|
end
|
|
14
16
|
|
|
15
|
-
def unlock_instructions(record, token, opts={})
|
|
17
|
+
def unlock_instructions(record, token, opts = {})
|
|
16
18
|
@token = token
|
|
17
19
|
devise_mail(record, :unlock_instructions, opts)
|
|
18
20
|
end
|
|
19
21
|
|
|
20
|
-
def
|
|
22
|
+
def email_changed(record, opts = {})
|
|
23
|
+
devise_mail(record, :email_changed, opts)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def password_change(record, opts = {})
|
|
21
27
|
devise_mail(record, :password_change, opts)
|
|
22
28
|
end
|
|
23
29
|
end
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<h2>Resend confirmation instructions</h2>
|
|
2
2
|
|
|
3
3
|
<%= form_for(resource, as: resource_name, url: confirmation_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, value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email) %>
|
|
8
|
+
<%= f.email_field :email, autofocus: true, autocomplete: "email", value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email) %>
|
|
9
9
|
</div>
|
|
10
10
|
|
|
11
11
|
<div class="actions">
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<p>Hello <%= @email %>!</p>
|
|
2
|
+
|
|
3
|
+
<% if @resource.try(:unconfirmed_email?) %>
|
|
4
|
+
<p>We're contacting you to notify you that your email is being changed to <%= @resource.unconfirmed_email %>.</p>
|
|
5
|
+
<% else %>
|
|
6
|
+
<p>We're contacting you to notify you that your email has been changed to <%= @resource.email %>.</p>
|
|
7
|
+
<% end %>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<h2>Change your password</h2>
|
|
2
2
|
|
|
3
3
|
<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %>
|
|
4
|
-
<%=
|
|
4
|
+
<%= render "devise/shared/error_messages", resource: resource %>
|
|
5
5
|
<%= f.hidden_field :reset_password_token %>
|
|
6
6
|
|
|
7
7
|
<div class="field">
|
|
@@ -9,12 +9,12 @@
|
|
|
9
9
|
<% if @minimum_password_length %>
|
|
10
10
|
<em>(<%= @minimum_password_length %> characters minimum)</em><br />
|
|
11
11
|
<% end %>
|
|
12
|
-
<%= f.password_field :password, autofocus: true, autocomplete: "
|
|
12
|
+
<%= f.password_field :password, autofocus: true, autocomplete: "new-password" %>
|
|
13
13
|
</div>
|
|
14
14
|
|
|
15
15
|
<div class="field">
|
|
16
16
|
<%= f.label :password_confirmation, "Confirm new password" %><br />
|
|
17
|
-
<%= f.password_field :password_confirmation, autocomplete: "
|
|
17
|
+
<%= f.password_field :password_confirmation, autocomplete: "new-password" %>
|
|
18
18
|
</div>
|
|
19
19
|
|
|
20
20
|
<div class="actions">
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<h2>Forgot your password?</h2>
|
|
2
2
|
|
|
3
3
|
<%= form_for(resource, as: resource_name, url: password_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">
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<h2>Edit <%= resource_name.to_s.humanize %></h2>
|
|
2
2
|
|
|
3
3
|
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) 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
|
<% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
|
|
@@ -14,17 +14,21 @@
|
|
|
14
14
|
|
|
15
15
|
<div class="field">
|
|
16
16
|
<%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br />
|
|
17
|
-
<%= f.password_field :password, autocomplete: "
|
|
17
|
+
<%= f.password_field :password, autocomplete: "new-password" %>
|
|
18
|
+
<% if @minimum_password_length %>
|
|
19
|
+
<br />
|
|
20
|
+
<em><%= @minimum_password_length %> characters minimum</em>
|
|
21
|
+
<% end %>
|
|
18
22
|
</div>
|
|
19
23
|
|
|
20
24
|
<div class="field">
|
|
21
25
|
<%= f.label :password_confirmation %><br />
|
|
22
|
-
<%= f.password_field :password_confirmation, autocomplete: "
|
|
26
|
+
<%= f.password_field :password_confirmation, autocomplete: "new-password" %>
|
|
23
27
|
</div>
|
|
24
28
|
|
|
25
29
|
<div class="field">
|
|
26
30
|
<%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
|
|
27
|
-
<%= f.password_field :current_password, autocomplete: "
|
|
31
|
+
<%= f.password_field :current_password, autocomplete: "current-password" %>
|
|
28
32
|
</div>
|
|
29
33
|
|
|
30
34
|
<div class="actions">
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<h2>Sign up</h2>
|
|
2
2
|
|
|
3
3
|
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) 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="field">
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
<% if @minimum_password_length %>
|
|
14
14
|
<em>(<%= @minimum_password_length %> characters minimum)</em>
|
|
15
15
|
<% end %><br />
|
|
16
|
-
<%= f.password_field :password, autocomplete: "
|
|
16
|
+
<%= f.password_field :password, autocomplete: "new-password" %>
|
|
17
17
|
</div>
|
|
18
18
|
|
|
19
19
|
<div class="field">
|
|
20
20
|
<%= f.label :password_confirmation %><br />
|
|
21
|
-
<%= f.password_field :password_confirmation, autocomplete: "
|
|
21
|
+
<%= f.password_field :password_confirmation, autocomplete: "new-password" %>
|
|
22
22
|
</div>
|
|
23
23
|
|
|
24
24
|
<div class="actions">
|
|
@@ -3,20 +3,20 @@
|
|
|
3
3
|
<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
|
|
4
4
|
<div class="field">
|
|
5
5
|
<%= f.label :email %><br />
|
|
6
|
-
<%= f.email_field :email, autofocus: true %>
|
|
6
|
+
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
|
|
7
7
|
</div>
|
|
8
8
|
|
|
9
9
|
<div class="field">
|
|
10
10
|
<%= f.label :password %><br />
|
|
11
|
-
<%= f.password_field :password, autocomplete: "
|
|
11
|
+
<%= f.password_field :password, autocomplete: "current-password" %>
|
|
12
12
|
</div>
|
|
13
13
|
|
|
14
|
-
<% if devise_mapping.rememberable?
|
|
14
|
+
<% if devise_mapping.rememberable? %>
|
|
15
15
|
<div class="field">
|
|
16
16
|
<%= f.check_box :remember_me %>
|
|
17
17
|
<%= f.label :remember_me %>
|
|
18
18
|
</div>
|
|
19
|
-
<% end
|
|
19
|
+
<% end %>
|
|
20
20
|
|
|
21
21
|
<div class="actions">
|
|
22
22
|
<%= f.submit "Log in" %>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<% if resource.errors.any? %>
|
|
2
|
+
<div id="error_explanation">
|
|
3
|
+
<h2>
|
|
4
|
+
<%= I18n.t("errors.messages.not_saved",
|
|
5
|
+
count: resource.errors.count,
|
|
6
|
+
resource: resource.class.model_name.human.downcase)
|
|
7
|
+
%>
|
|
8
|
+
</h2>
|
|
9
|
+
<ul>
|
|
10
|
+
<% resource.errors.full_messages.each do |message| %>
|
|
11
|
+
<li><%= message %></li>
|
|
12
|
+
<% end %>
|
|
13
|
+
</ul>
|
|
14
|
+
</div>
|
|
15
|
+
<% end %>
|