devise 3.5.1 → 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 +259 -1076
- data/MIT-LICENSE +1 -1
- data/README.md +256 -68
- 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 +10 -7
- 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 +10 -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/mailer/password_change.html.erb +3 -0
- data/app/views/devise/passwords/edit.html.erb +5 -5
- 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 +6 -1
- data/lib/devise/controllers/helpers.rb +35 -26
- 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 +35 -18
- 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 +84 -27
- 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 +7 -7
- 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 +106 -33
- data/lib/devise/models/database_authenticatable.rb +97 -21
- data/lib/devise/models/lockable.rb +15 -5
- data/lib/devise/models/omniauthable.rb +2 -0
- data/lib/devise/models/recoverable.rb +32 -24
- 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 +67 -47
- 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 +5 -3
- 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 +73 -46
- 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 +21 -11
- data/lib/generators/mongoid/devise_generator.rb +7 -5
- data/lib/generators/templates/README +1 -8
- data/lib/generators/templates/controllers/README +1 -1
- 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 +52 -22
- data/lib/generators/templates/markerb/confirmation_instructions.markerb +1 -1
- data/lib/generators/templates/markerb/email_changed.markerb +7 -0
- data/lib/generators/templates/markerb/password_change.markerb +3 -0
- data/lib/generators/templates/markerb/reset_password_instructions.markerb +1 -1
- data/lib/generators/templates/markerb/unlock_instructions.markerb +1 -1
- 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 +15 -301
- data/.gitignore +0 -10
- data/.travis.yml +0 -45
- data/.yardopts +0 -9
- data/CONTRIBUTING.md +0 -14
- data/Gemfile +0 -29
- data/Gemfile.lock +0 -191
- data/Rakefile +0 -36
- data/devise.gemspec +0 -29
- data/devise.png +0 -0
- data/gemfiles/Gemfile.rails-3.2-stable +0 -29
- data/gemfiles/Gemfile.rails-3.2-stable.lock +0 -169
- data/gemfiles/Gemfile.rails-4.0-stable +0 -29
- data/gemfiles/Gemfile.rails-4.0-stable.lock +0 -163
- data/gemfiles/Gemfile.rails-4.1-stable +0 -29
- data/gemfiles/Gemfile.rails-4.1-stable.lock +0 -169
- data/gemfiles/Gemfile.rails-4.2-stable +0 -29
- data/gemfiles/Gemfile.rails-4.2-stable.lock +0 -191
- 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/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 -298
- 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 -96
- 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 -133
- 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 -189
- 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 -468
- data/test/models/database_authenticatable_test.rb +0 -249
- data/test/models/lockable_test.rb +0 -328
- data/test/models/omniauthable_test.rb +0 -7
- data/test/models/recoverable_test.rb +0 -228
- 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 -144
- 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/controllers/admins/sessions_controller.rb +0 -6
- data/test/rails_app/app/controllers/admins_controller.rb +0 -11
- 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/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 -122
- 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_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 -73
- 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
|
@@ -16,5 +18,13 @@ if defined?(ActionMailer)
|
|
16
18
|
@token = token
|
17
19
|
devise_mail(record, :unlock_instructions, opts)
|
18
20
|
end
|
21
|
+
|
22
|
+
def email_changed(record, opts={})
|
23
|
+
devise_mail(record, :email_changed, opts)
|
24
|
+
end
|
25
|
+
|
26
|
+
def password_change(record, opts={})
|
27
|
+
devise_mail(record, :password_change, opts)
|
28
|
+
end
|
19
29
|
end
|
20
30
|
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,20 +1,20 @@
|
|
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">
|
8
8
|
<%= f.label :password, "New password" %><br />
|
9
9
|
<% if @minimum_password_length %>
|
10
|
-
|
11
|
-
<% end
|
12
|
-
<%= f.password_field :password, autofocus: true, autocomplete: "
|
10
|
+
<em>(<%= @minimum_password_length %> characters minimum)</em><br />
|
11
|
+
<% end %>
|
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
|
-
<%= link_to "Sign in with #{provider
|
24
|
-
<% end
|
25
|
-
<% end
|
23
|
+
<%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider) %><br />
|
24
|
+
<% end %>
|
25
|
+
<% end %>
|
@@ -1,11 +1,11 @@
|
|
1
1
|
<h2>Resend unlock instructions</h2>
|
2
2
|
|
3
3
|
<%= form_for(resource, as: resource_name, url: unlock_path(resource_name), html: { method: :post }) do |f| %>
|
4
|
-
<%=
|
4
|
+
<%= render "devise/shared/error_messages", resource: resource %>
|
5
5
|
|
6
6
|
<div class="field">
|
7
7
|
<%= f.label :email %><br />
|
8
|
-
<%= f.email_field :email, autofocus: true %>
|
8
|
+
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
|
9
9
|
</div>
|
10
10
|
|
11
11
|
<div class="actions">
|
data/config/locales/en.yml
CHANGED
@@ -23,6 +23,10 @@ en:
|
|
23
23
|
subject: "Reset password instructions"
|
24
24
|
unlock_instructions:
|
25
25
|
subject: "Unlock instructions"
|
26
|
+
email_changed:
|
27
|
+
subject: "Email Changed"
|
28
|
+
password_change:
|
29
|
+
subject: "Password Changed"
|
26
30
|
omniauth_callbacks:
|
27
31
|
failure: "Could not authenticate you from %{kind} because \"%{reason}\"."
|
28
32
|
success: "Successfully authenticated from %{kind} account."
|
@@ -38,8 +42,9 @@ en:
|
|
38
42
|
signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated."
|
39
43
|
signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked."
|
40
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."
|
41
|
-
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."
|
42
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"
|
43
48
|
sessions:
|
44
49
|
signed_in: "Signed in successfully."
|
45
50
|
signed_out: "Signed out successfully."
|