devise 3.5.3 → 4.7.1
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 +256 -1099
- data/MIT-LICENSE +1 -1
- data/README.md +254 -67
- data/app/controllers/devise/confirmations_controller.rb +3 -1
- data/app/controllers/devise/omniauth_callbacks_controller.rb +8 -6
- data/app/controllers/devise/passwords_controller.rb +7 -4
- data/app/controllers/devise/registrations_controller.rb +39 -18
- data/app/controllers/devise/sessions_controller.rb +9 -7
- data/app/controllers/devise/unlocks_controller.rb +4 -2
- data/app/controllers/devise_controller.rb +23 -10
- data/app/helpers/devise_helper.rb +12 -19
- data/app/mailers/devise/mailer.rb +6 -0
- 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 +7 -7
- data/app/views/devise/unlocks/new.html.erb +2 -2
- data/config/locales/en.yml +4 -1
- data/lib/devise/controllers/helpers.rb +23 -20
- data/lib/devise/controllers/rememberable.rb +11 -2
- data/lib/devise/controllers/scoped_views.rb +2 -0
- data/lib/devise/controllers/sign_in_out.rb +34 -11
- data/lib/devise/controllers/store_location.rb +25 -7
- data/lib/devise/controllers/url_helpers.rb +2 -0
- data/lib/devise/delegator.rb +2 -0
- data/lib/devise/encryptor.rb +6 -4
- data/lib/devise/failure_app.rb +75 -37
- 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 +6 -1
- data/lib/devise/hooks/proxy.rb +3 -1
- data/lib/devise/hooks/rememberable.rb +2 -0
- data/lib/devise/hooks/timeoutable.rb +5 -2
- data/lib/devise/hooks/trackable.rb +2 -0
- data/lib/devise/mailers/helpers.rb +7 -4
- data/lib/devise/mapping.rb +2 -0
- data/lib/devise/models/authenticatable.rb +51 -26
- data/lib/devise/models/confirmable.rb +89 -27
- data/lib/devise/models/database_authenticatable.rb +88 -21
- data/lib/devise/models/lockable.rb +15 -5
- 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 +42 -26
- data/lib/devise/models/timeoutable.rb +2 -6
- data/lib/devise/models/trackable.rb +15 -1
- data/lib/devise/models/validatable.rb +10 -3
- data/lib/devise/models.rb +3 -1
- data/lib/devise/modules.rb +2 -0
- data/lib/devise/omniauth/config.rb +2 -0
- data/lib/devise/omniauth/url_helpers.rb +14 -5
- data/lib/devise/omniauth.rb +2 -0
- 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 +139 -65
- data/lib/devise/rails/routes.rb +44 -33
- data/lib/devise/rails/warden_compat.rb +3 -10
- data/lib/devise/rails.rb +7 -16
- 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 +11 -4
- data/lib/devise/strategies/rememberable.rb +5 -6
- data/lib/devise/test/controller_helpers.rb +165 -0
- data/lib/devise/test/integration_helpers.rb +63 -0
- data/lib/devise/test_helpers.rb +7 -124
- data/lib/devise/time_inflector.rb +2 -0
- data/lib/devise/token_generator.rb +3 -41
- data/lib/devise/version.rb +3 -1
- data/lib/devise.rb +61 -40
- data/lib/generators/active_record/devise_generator.rb +29 -10
- data/lib/generators/active_record/templates/migration.rb +4 -2
- data/lib/generators/active_record/templates/migration_existing.rb +4 -2
- data/lib/generators/devise/controllers_generator.rb +3 -1
- data/lib/generators/devise/devise_generator.rb +4 -2
- data/lib/generators/devise/install_generator.rb +17 -0
- data/lib/generators/devise/orm_helpers.rb +10 -21
- data/lib/generators/devise/views_generator.rb +7 -8
- data/lib/generators/mongoid/devise_generator.rb +7 -5
- data/lib/generators/templates/README +1 -8
- data/lib/generators/templates/controllers/confirmations_controller.rb +2 -0
- data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +2 -0
- data/lib/generators/templates/controllers/passwords_controller.rb +2 -0
- data/lib/generators/templates/controllers/registrations_controller.rb +6 -4
- data/lib/generators/templates/controllers/sessions_controller.rb +4 -2
- data/lib/generators/templates/controllers/unlocks_controller.rb +2 -0
- data/lib/generators/templates/devise.rb +50 -20
- 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 +13 -310
- 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 -29
- data/Gemfile.lock +0 -183
- data/Rakefile +0 -36
- data/devise.gemspec +0 -27
- data/devise.png +0 -0
- data/gemfiles/Gemfile.rails-3.2-stable +0 -29
- data/gemfiles/Gemfile.rails-3.2-stable.lock +0 -172
- data/gemfiles/Gemfile.rails-4.0-stable +0 -29
- data/gemfiles/Gemfile.rails-4.0-stable.lock +0 -166
- data/gemfiles/Gemfile.rails-4.1-stable +0 -29
- data/gemfiles/Gemfile.rails-4.1-stable.lock +0 -172
- data/gemfiles/Gemfile.rails-4.2-stable +0 -29
- data/gemfiles/Gemfile.rails-4.2-stable.lock +0 -194
- data/script/cached-bundle +0 -49
- data/script/s3-put +0 -71
- data/test/controllers/custom_registrations_controller_test.rb +0 -40
- data/test/controllers/custom_strategy_test.rb +0 -62
- data/test/controllers/helper_methods_test.rb +0 -21
- 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 -129
- data/test/controllers/load_hooks_controller_test.rb +0 -19
- data/test/controllers/passwords_controller_test.rb +0 -31
- data/test/controllers/sessions_controller_test.rb +0 -103
- 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 -315
- data/test/generators/active_record_generator_test.rb +0 -109
- 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 -13
- 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 -729
- 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 -105
- data/test/integration/lockable_test.rb +0 -239
- data/test/integration/omniauthable_test.rb +0 -135
- data/test/integration/recoverable_test.rb +0 -347
- data/test/integration/registerable_test.rb +0 -359
- data/test/integration/rememberable_test.rb +0 -176
- 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 -489
- data/test/models/database_authenticatable_test.rb +0 -269
- data/test/models/lockable_test.rb +0 -328
- 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 -204
- 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 -127
- data/test/models_test.rb +0 -153
- data/test/omniauth/config_test.rb +0 -57
- data/test/omniauth/url_helpers_test.rb +0 -54
- data/test/orm/active_record.rb +0 -10
- data/test/orm/mongoid.rb +0 -13
- data/test/parameter_sanitizer_test.rb +0 -81
- 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 -6
- 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 -12
- 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 -25
- 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 -40
- 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 -41
- 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 -8
- data/test/rails_app/config/initializers/session_store.rb +0 -1
- data/test/rails_app/config/routes.rb +0 -125
- data/test/rails_app/config.ru +0 -4
- 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 -29
- 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 -264
- 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/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 -24
- data/test/test_helper.rb +0 -34
- data/test/test_helpers_test.rb +0 -178
- data/test/test_models.rb +0 -33
| @@ -1,13 +1,15 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            class Devise::RegistrationsController < DeviseController
         | 
| 2 | 
            -
               | 
| 3 | 
            -
               | 
| 4 | 
            +
              prepend_before_action :require_no_authentication, only: [:new, :create, :cancel]
         | 
| 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
         | 
| @@ -18,11 +20,11 @@ class Devise::RegistrationsController < DeviseController | |
| 18 20 | 
             
                yield resource if block_given?
         | 
| 19 21 | 
             
                if resource.persisted?
         | 
| 20 22 | 
             
                  if resource.active_for_authentication?
         | 
| 21 | 
            -
                    set_flash_message :notice, :signed_up | 
| 23 | 
            +
                    set_flash_message! :notice, :signed_up
         | 
| 22 24 | 
             
                    sign_up(resource_name, resource)
         | 
| 23 25 | 
             
                    respond_with resource, location: after_sign_up_path_for(resource)
         | 
| 24 26 | 
             
                  else
         | 
| 25 | 
            -
                    set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" | 
| 27 | 
            +
                    set_flash_message! :notice, :"signed_up_but_#{resource.inactive_message}"
         | 
| 26 28 | 
             
                    expire_data_after_sign_in!
         | 
| 27 29 | 
             
                    respond_with resource, location: after_inactive_sign_up_path_for(resource)
         | 
| 28 30 | 
             
                  end
         | 
| @@ -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
         | 
| @@ -65,7 +65,7 @@ class Devise::RegistrationsController < DeviseController | |
| 65 65 | 
             
              def destroy
         | 
| 66 66 | 
             
                resource.destroy
         | 
| 67 67 | 
             
                Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)
         | 
| 68 | 
            -
                set_flash_message :notice, :destroyed | 
| 68 | 
            +
                set_flash_message! :notice, :destroyed
         | 
| 69 69 | 
             
                yield resource if block_given?
         | 
| 70 70 | 
             
                respond_with_navigational(resource){ redirect_to after_sign_out_path_for(resource_name) }
         | 
| 71 71 | 
             
              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 | 
            -
               | 
| 3 | 
            -
               | 
| 4 | 
            -
               | 
| 5 | 
            -
               | 
| 4 | 
            +
              prepend_before_action :require_no_authentication, only: [:new, :create]
         | 
| 5 | 
            +
              prepend_before_action :allow_params_authentication!, only: :create
         | 
| 6 | 
            +
              prepend_before_action :verify_signed_out_user, only: :destroy
         | 
| 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
         | 
| @@ -15,7 +17,7 @@ class Devise::SessionsController < DeviseController | |
| 15 17 | 
             
              # POST /resource/sign_in
         | 
| 16 18 | 
             
              def create
         | 
| 17 19 | 
             
                self.resource = warden.authenticate!(auth_options)
         | 
| 18 | 
            -
                set_flash_message(:notice, :signed_in) | 
| 20 | 
            +
                set_flash_message!(:notice, :signed_in)
         | 
| 19 21 | 
             
                sign_in(resource_name, resource)
         | 
| 20 22 | 
             
                yield resource if block_given?
         | 
| 21 23 | 
             
                respond_with resource, location: after_sign_in_path_for(resource)
         | 
| @@ -24,7 +26,7 @@ class Devise::SessionsController < DeviseController | |
| 24 26 | 
             
              # DELETE /resource/sign_out
         | 
| 25 27 | 
             
              def destroy
         | 
| 26 28 | 
             
                signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
         | 
| 27 | 
            -
                set_flash_message :notice, :signed_out if signed_out | 
| 29 | 
            +
                set_flash_message! :notice, :signed_out if signed_out
         | 
| 28 30 | 
             
                yield if block_given?
         | 
| 29 31 | 
             
                respond_to_on_destroy
         | 
| 30 32 | 
             
              end
         | 
| @@ -58,7 +60,7 @@ class Devise::SessionsController < DeviseController | |
| 58 60 | 
             
              # to the after_sign_out path.
         | 
| 59 61 | 
             
              def verify_signed_out_user
         | 
| 60 62 | 
             
                if all_signed_out?
         | 
| 61 | 
            -
                  set_flash_message :notice, :already_signed_out | 
| 63 | 
            +
                  set_flash_message! :notice, :already_signed_out
         | 
| 62 64 |  | 
| 63 65 | 
             
                  respond_to_on_destroy
         | 
| 64 66 | 
             
                end
         | 
| @@ -1,5 +1,7 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            class Devise::UnlocksController < DeviseController
         | 
| 2 | 
            -
               | 
| 4 | 
            +
              prepend_before_action :require_no_authentication
         | 
| 3 5 |  | 
| 4 6 | 
             
              # GET /resource/unlock/new
         | 
| 5 7 | 
             
              def new
         | 
| @@ -24,7 +26,7 @@ class Devise::UnlocksController < DeviseController | |
| 24 26 | 
             
                yield resource if block_given?
         | 
| 25 27 |  | 
| 26 28 | 
             
                if resource.errors.empty?
         | 
| 27 | 
            -
                  set_flash_message :notice, :unlocked | 
| 29 | 
            +
                  set_flash_message! :notice, :unlocked
         | 
| 28 30 | 
             
                  respond_with_navigational(resource){ redirect_to after_unlock_path_for(resource) }
         | 
| 29 31 | 
             
                else
         | 
| 30 32 | 
             
                  respond_with_navigational(resource.errors, status: :unprocessable_entity){ render :new }
         | 
| @@ -1,14 +1,20 @@ | |
| 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
         | 
| 4 6 |  | 
| 5 | 
            -
              helper | 
| 7 | 
            +
              if respond_to?(:helper)
         | 
| 8 | 
            +
                helper DeviseHelper
         | 
| 9 | 
            +
              end
         | 
| 6 10 |  | 
| 7 | 
            -
               | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 11 | 
            +
              if respond_to?(:helper_method)
         | 
| 12 | 
            +
                helpers = %w(resource scope_name resource_name signed_in_resource
         | 
| 13 | 
            +
                             resource_class resource_params devise_mapping)
         | 
| 14 | 
            +
                helper_method(*helpers)
         | 
| 15 | 
            +
              end
         | 
| 10 16 |  | 
| 11 | 
            -
               | 
| 17 | 
            +
              prepend_before_action :assert_is_devise_resource!
         | 
| 12 18 | 
             
              respond_to :html if mimes_for_respond_to.empty?
         | 
| 13 19 |  | 
| 14 20 | 
             
              # Override prefixes to consider the scoped view.
         | 
| @@ -16,7 +22,7 @@ class DeviseController < Devise.parent_controller.constantize | |
| 16 22 | 
             
              # Action Controller tests that forces _prefixes to be
         | 
| 17 23 | 
             
              # loaded before even having a request object.
         | 
| 18 24 | 
             
              #
         | 
| 19 | 
            -
              # This method should be public as it is  | 
| 25 | 
            +
              # This method should be public as it is in ActionPack
         | 
| 20 26 | 
             
              # itself. Changing its visibility may break other gems.
         | 
| 21 27 | 
             
              def _prefixes #:nodoc:
         | 
| 22 28 | 
             
                @_prefixes ||= if self.class.scoped_views? && request && devise_mapping
         | 
| @@ -89,10 +95,10 @@ MESSAGE | |
| 89 95 | 
             
                instance_variable_set(:"@#{resource_name}", new_resource)
         | 
| 90 96 | 
             
              end
         | 
| 91 97 |  | 
| 92 | 
            -
              # Helper for use in  | 
| 98 | 
            +
              # Helper for use in before_actions where no authentication is required.
         | 
| 93 99 | 
             
              #
         | 
| 94 100 | 
             
              # Example:
         | 
| 95 | 
            -
              #    | 
| 101 | 
            +
              #   before_action :require_no_authentication, only: :new
         | 
| 96 102 | 
             
              def require_no_authentication
         | 
| 97 103 | 
             
                assert_is_devise_resource!
         | 
| 98 104 | 
             
                return unless is_navigational_format?
         | 
| @@ -123,13 +129,13 @@ MESSAGE | |
| 123 129 | 
             
                end
         | 
| 124 130 |  | 
| 125 131 | 
             
                if notice
         | 
| 126 | 
            -
                  set_flash_message :notice, notice | 
| 132 | 
            +
                  set_flash_message! :notice, notice
         | 
| 127 133 | 
             
                  true
         | 
| 128 134 | 
             
                end
         | 
| 129 135 | 
             
              end
         | 
| 130 136 |  | 
| 131 137 | 
             
              # Sets the flash message with :key, using I18n. By default you are able
         | 
| 132 | 
            -
              # to  | 
| 138 | 
            +
              # to set up your messages using specific resource scope, and if no message is
         | 
| 133 139 | 
             
              # found we look to the default scope. Set the "now" options key to a true
         | 
| 134 140 | 
             
              # value to populate the flash.now hash in lieu of the default flash hash (so
         | 
| 135 141 | 
             
              # the flash message will be available to the current action instead of the
         | 
| @@ -154,6 +160,13 @@ MESSAGE | |
| 154 160 | 
             
                end
         | 
| 155 161 | 
             
              end
         | 
| 156 162 |  | 
| 163 | 
            +
              # Sets flash message if is_flashing_format? equals true
         | 
| 164 | 
            +
              def set_flash_message!(key, kind, options = {})
         | 
| 165 | 
            +
                if is_flashing_format?
         | 
| 166 | 
            +
                  set_flash_message(key, kind, options)
         | 
| 167 | 
            +
                end
         | 
| 168 | 
            +
              end
         | 
| 169 | 
            +
             | 
| 157 170 | 
             
              # Sets minimum password length to show to user
         | 
| 158 171 | 
             
              def set_minimum_password_length
         | 
| 159 172 | 
             
                if devise_mapping.validatable?
         | 
| @@ -1,25 +1,18 @@ | |
| 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 favour 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!`
         | 
| 9 | 
            +
                  is deprecated and it will be removed in the next major version.
         | 
| 10 | 
            +
                  To customize the errors styles please run `rails g devise:views` and modify the
         | 
| 11 | 
            +
                  `devise/shared/error_messages` partial.
         | 
| 12 | 
            +
                DEPRECATION
         | 
| 10 13 |  | 
| 11 | 
            -
                 | 
| 12 | 
            -
                sentence = I18n.t("errors.messages.not_saved",
         | 
| 13 | 
            -
                                  count: resource.errors.count,
         | 
| 14 | 
            -
                                  resource: resource.class.model_name.human.downcase)
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                html = <<-HTML
         | 
| 17 | 
            -
                <div id="error_explanation">
         | 
| 18 | 
            -
                  <h2>#{sentence}</h2>
         | 
| 19 | 
            -
                  <ul>#{messages}</ul>
         | 
| 20 | 
            -
                </div>
         | 
| 21 | 
            -
                HTML
         | 
| 14 | 
            +
                return "" if resource.errors.empty?
         | 
| 22 15 |  | 
| 23 | 
            -
                 | 
| 16 | 
            +
                render "devise/shared/error_messages", resource: resource
         | 
| 24 17 | 
             
              end
         | 
| 25 18 | 
             
            end
         | 
| @@ -1,3 +1,5 @@ | |
| 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
         | 
| @@ -17,6 +19,10 @@ if defined?(ActionMailer) | |
| 17 19 | 
             
                  devise_mail(record, :unlock_instructions, opts)
         | 
| 18 20 | 
             
                end
         | 
| 19 21 |  | 
| 22 | 
            +
                def email_changed(record, opts={})
         | 
| 23 | 
            +
                  devise_mail(record, :email_changed, opts)
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 20 26 | 
             
                def password_change(record, opts={})
         | 
| 21 27 | 
             
                  devise_mail(record, :password_change, opts)
         | 
| 22 28 | 
             
                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 %>
         | 
| @@ -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 23 | 
             
                <%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider) %><br />
         | 
| 24 | 
            -
              <% end  | 
| 25 | 
            -
            <% end  | 
| 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
    
    | @@ -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."
         | 
| @@ -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.
         | 
| @@ -30,8 +32,8 @@ module Devise | |
| 30 32 | 
             
                    #     current_bloggers       # Currently signed in user and admin
         | 
| 31 33 | 
             
                    #
         | 
| 32 34 | 
             
                    #   Use:
         | 
| 33 | 
            -
                    #      | 
| 34 | 
            -
                    #      | 
| 35 | 
            +
                    #     before_action :authenticate_blogger!              # Redirects unless either a user or an admin are authenticated
         | 
| 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 39 | 
             
                    def devise_group(group_name, opts={})
         | 
| @@ -84,7 +86,7 @@ module Devise | |
| 84 86 | 
             
                  end
         | 
| 85 87 |  | 
| 86 88 | 
             
                  # Define authentication filters and accessor helpers based on mappings.
         | 
| 87 | 
            -
                  # These filters should be used inside the controllers as  | 
| 89 | 
            +
                  # These filters should be used inside the controllers as before_actions,
         | 
| 88 90 | 
             
                  # so you can control the scope of the user who should be signed in to
         | 
| 89 91 | 
             
                  # access that specific controller/action.
         | 
| 90 92 | 
             
                  # Example:
         | 
| @@ -104,8 +106,8 @@ module Devise | |
| 104 106 | 
             
                  #     admin_session       # Session data available only to the admin scope
         | 
| 105 107 | 
             
                  #
         | 
| 106 108 | 
             
                  #   Use:
         | 
| 107 | 
            -
                  #      | 
| 108 | 
            -
                  #      | 
| 109 | 
            +
                  #     before_action :authenticate_user!  # Tell devise to use :user map
         | 
| 110 | 
            +
                  #     before_action :authenticate_admin! # Tell devise to use :admin map
         | 
| 109 111 | 
             
                  #
         | 
| 110 112 | 
             
                  def self.define_helpers(mapping) #:nodoc:
         | 
| 111 113 | 
             
                    mapping = mapping.name
         | 
| @@ -138,27 +140,23 @@ 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
         | 
| 145 147 | 
             
                  # the controllers defined inside devise. Useful if you want to apply a before
         | 
| 146 148 | 
             
                  # filter to all controllers, except the ones in devise:
         | 
| 147 149 | 
             
                  #
         | 
| 148 | 
            -
                  #    | 
| 150 | 
            +
                  #   before_action :my_filter, unless: :devise_controller?
         | 
| 149 151 | 
             
                  def devise_controller?
         | 
| 150 152 | 
             
                    is_a?(::DeviseController)
         | 
| 151 153 | 
             
                  end
         | 
| 152 154 |  | 
| 153 | 
            -
                  #  | 
| 155 | 
            +
                  # Set up a param sanitizer to filter parameters using strong_parameters. See
         | 
| 154 156 | 
             
                  # lib/devise/parameter_sanitizer.rb for more info. Override this
         | 
| 155 157 | 
             
                  # method in your application controller to use your own parameter sanitizer.
         | 
| 156 158 | 
             
                  def devise_parameter_sanitizer
         | 
| 157 | 
            -
                    @devise_parameter_sanitizer ||=  | 
| 158 | 
            -
                      Devise::ParameterSanitizer.new(resource_class, resource_name, params)
         | 
| 159 | 
            -
                    else
         | 
| 160 | 
            -
                      Devise::BaseSanitizer.new(resource_class, resource_name, params)
         | 
| 161 | 
            -
                    end
         | 
| 159 | 
            +
                    @devise_parameter_sanitizer ||= Devise::ParameterSanitizer.new(resource_class, resource_name, params)
         | 
| 162 160 | 
             
                  end
         | 
| 163 161 |  | 
| 164 162 | 
             
                  # Tell warden that params authentication is allowed for that specific page.
         | 
| @@ -270,21 +268,26 @@ module Devise | |
| 270 268 | 
             
                  # Check if flash messages should be emitted. Default is to do it on
         | 
| 271 269 | 
             
                  # navigational formats
         | 
| 272 270 | 
             
                  def is_flashing_format?
         | 
| 273 | 
            -
                    is_navigational_format?
         | 
| 271 | 
            +
                    request.respond_to?(:flash) && is_navigational_format?
         | 
| 274 272 | 
             
                  end
         | 
| 275 273 |  | 
| 276 274 | 
             
                  private
         | 
| 277 275 |  | 
| 278 | 
            -
                  def expire_session_data_after_sign_in!
         | 
| 279 | 
            -
                    ActiveSupport::Deprecation.warn "expire_session_data_after_sign_in! is deprecated " \
         | 
| 280 | 
            -
                      "in favor of expire_data_after_sign_in!"
         | 
| 281 | 
            -
                    expire_data_after_sign_in!
         | 
| 282 | 
            -
                  end
         | 
| 283 | 
            -
             | 
| 284 276 | 
             
                  def expire_data_after_sign_out!
         | 
| 285 277 | 
             
                    Devise.mappings.each { |_,m| instance_variable_set("@current_#{m.name}", nil) }
         | 
| 286 278 | 
             
                    super
         | 
| 287 279 | 
             
                  end
         | 
| 288 280 | 
             
                end
         | 
| 289 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
         | 
| 290 293 | 
             
            end
         |