devise 3.5.2 → 4.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +259 -1086
- 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 +8 -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 +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 +3 -3
- data/app/views/devise/passwords/new.html.erb +2 -2
- data/app/views/devise/registrations/edit.html.erb +9 -5
- data/app/views/devise/registrations/new.html.erb +4 -4
- data/app/views/devise/sessions/new.html.erb +4 -4
- data/app/views/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/devise/shared/_links.html.erb +8 -8
- data/app/views/devise/unlocks/new.html.erb +2 -2
- data/config/locales/en.yml +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 +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 +84 -32
- 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 -3
- 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 +97 -20
- 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 +59 -34
- 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 +4 -2
- 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 +72 -42
- 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/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 -19
- 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 +27 -313
- 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 -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 -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 -172
- 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 -479
- 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 -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/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 -120
- 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
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -4,7 +4,6 @@ By [Plataformatec](http://plataformatec.com.br/).
|
|
4
4
|
|
5
5
|
[![Build Status](https://api.travis-ci.org/plataformatec/devise.svg?branch=master)](http://travis-ci.org/plataformatec/devise)
|
6
6
|
[![Code Climate](https://codeclimate.com/github/plataformatec/devise.svg)](https://codeclimate.com/github/plataformatec/devise)
|
7
|
-
[![Security](https://hakiri.io/github/plataformatec/devise/master.svg)](https://hakiri.io/github/plataformatec/devise/master)
|
8
7
|
|
9
8
|
This README is [also available in a friendly navigable format](http://devise.plataformatec.com.br/).
|
10
9
|
|
@@ -17,18 +16,56 @@ Devise is a flexible authentication solution for Rails based on Warden. It:
|
|
17
16
|
|
18
17
|
It's composed of 10 modules:
|
19
18
|
|
20
|
-
* [Database Authenticatable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/DatabaseAuthenticatable):
|
21
|
-
* [Omniauthable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Omniauthable): adds OmniAuth (https://github.com/
|
22
|
-
* [Confirmable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Confirmable): sends emails with confirmation instructions and verifies whether an account is already confirmed during sign in.
|
23
|
-
* [Recoverable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Recoverable): resets the user password and sends reset instructions.
|
24
|
-
* [Registerable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Registerable): handles signing up users through a registration process, also allowing them to edit and destroy their account.
|
25
|
-
* [Rememberable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Rememberable): manages generating and clearing a token for remembering the user from a saved cookie.
|
26
|
-
* [Trackable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Trackable): tracks sign in count, timestamps and IP address.
|
27
|
-
* [Timeoutable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Timeoutable): expires sessions that have not been active in a specified period of time.
|
28
|
-
* [Validatable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Validatable): provides validations of email and password. It's optional and can be customized, so you're able to define your own validations.
|
29
|
-
* [Lockable](http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Lockable): locks an account after a specified number of failed sign-in attempts. Can unlock via email or after a specified time period.
|
19
|
+
* [Database Authenticatable](http://www.rubydoc.info/github/plataformatec/devise/master/Devise/Models/DatabaseAuthenticatable): hashes and stores a password in the database to validate the authenticity of a user while signing in. The authentication can be done both through POST requests or HTTP Basic Authentication.
|
20
|
+
* [Omniauthable](http://www.rubydoc.info/github/plataformatec/devise/master/Devise/Models/Omniauthable): adds OmniAuth (https://github.com/omniauth/omniauth) support.
|
21
|
+
* [Confirmable](http://www.rubydoc.info/github/plataformatec/devise/master/Devise/Models/Confirmable): sends emails with confirmation instructions and verifies whether an account is already confirmed during sign in.
|
22
|
+
* [Recoverable](http://www.rubydoc.info/github/plataformatec/devise/master/Devise/Models/Recoverable): resets the user password and sends reset instructions.
|
23
|
+
* [Registerable](http://www.rubydoc.info/github/plataformatec/devise/master/Devise/Models/Registerable): handles signing up users through a registration process, also allowing them to edit and destroy their account.
|
24
|
+
* [Rememberable](http://www.rubydoc.info/github/plataformatec/devise/master/Devise/Models/Rememberable): manages generating and clearing a token for remembering the user from a saved cookie.
|
25
|
+
* [Trackable](http://www.rubydoc.info/github/plataformatec/devise/master/Devise/Models/Trackable): tracks sign in count, timestamps and IP address.
|
26
|
+
* [Timeoutable](http://www.rubydoc.info/github/plataformatec/devise/master/Devise/Models/Timeoutable): expires sessions that have not been active in a specified period of time.
|
27
|
+
* [Validatable](http://www.rubydoc.info/github/plataformatec/devise/master/Devise/Models/Validatable): provides validations of email and password. It's optional and can be customized, so you're able to define your own validations.
|
28
|
+
* [Lockable](http://www.rubydoc.info/github/plataformatec/devise/master/Devise/Models/Lockable): locks an account after a specified number of failed sign-in attempts. Can unlock via email or after a specified time period.
|
29
|
+
|
30
|
+
## Table of Contents
|
31
|
+
|
32
|
+
<!-- TOC depthFrom:1 depthTo:6 withLinks:1 orderedList:0 -->
|
33
|
+
|
34
|
+
- [Information](#information)
|
35
|
+
- [The Devise wiki](#the-devise-wiki)
|
36
|
+
- [Bug reports](#bug-reports)
|
37
|
+
- [StackOverflow and Mailing List](#stackoverflow-and-mailing-list)
|
38
|
+
- [RDocs](#rdocs)
|
39
|
+
- [Example applications](#example-applications)
|
40
|
+
- [Extensions](#extensions)
|
41
|
+
- [Contributing](#contributing)
|
42
|
+
- [Starting with Rails?](#starting-with-rails)
|
43
|
+
- [Getting started](#getting-started)
|
44
|
+
- [Controller filters and helpers](#controller-filters-and-helpers)
|
45
|
+
- [Configuring Models](#configuring-models)
|
46
|
+
- [Strong Parameters](#strong-parameters)
|
47
|
+
- [Configuring views](#configuring-views)
|
48
|
+
- [Configuring controllers](#configuring-controllers)
|
49
|
+
- [Configuring routes](#configuring-routes)
|
50
|
+
- [I18n](#i18n)
|
51
|
+
- [Test helpers](#test-helpers)
|
52
|
+
- [Controller tests](#controller-tests)
|
53
|
+
- [Integration tests](#integration-tests)
|
54
|
+
- [OmniAuth](#omniauth)
|
55
|
+
- [Configuring multiple models](#configuring-multiple-models)
|
56
|
+
- [ActiveJob Integration](#activejob-integration)
|
57
|
+
- [Password reset tokens and Rails logs](#password-reset-tokens-and-rails-logs)
|
58
|
+
- [Other ORMs](#other-orms)
|
59
|
+
- [Rails API mode](#rails-api-mode)
|
60
|
+
- [Additional information](#additional-information)
|
61
|
+
- [Heroku](#heroku)
|
62
|
+
- [Warden](#warden)
|
63
|
+
- [Contributors](#contributors)
|
64
|
+
- [License](#license)
|
65
|
+
|
66
|
+
<!-- /TOC -->
|
67
|
+
|
30
68
|
|
31
|
-
Devise is guaranteed to be thread-safe on YARV. Thread-safety support on JRuby is in progress.
|
32
69
|
|
33
70
|
## Information
|
34
71
|
|
@@ -46,9 +83,13 @@ https://github.com/plataformatec/devise/wiki/Bug-reports
|
|
46
83
|
|
47
84
|
If you have discovered a security related bug, please do *NOT* use the GitHub issue tracker. Send an email to opensource@plataformatec.com.br.
|
48
85
|
|
49
|
-
### Mailing
|
86
|
+
### StackOverflow and Mailing List
|
87
|
+
|
88
|
+
If you have any questions, comments, or concerns, please use StackOverflow instead of the GitHub issue tracker:
|
89
|
+
|
90
|
+
http://stackoverflow.com/questions/tagged/devise
|
50
91
|
|
51
|
-
|
92
|
+
The deprecated mailing list can still be read on
|
52
93
|
|
53
94
|
https://groups.google.com/group/plataformatec-devise
|
54
95
|
|
@@ -78,7 +119,54 @@ We hope that you will consider contributing to Devise. Please read this short ov
|
|
78
119
|
|
79
120
|
https://github.com/plataformatec/devise/wiki/Contributing
|
80
121
|
|
81
|
-
You will usually want to write tests for your changes. To run the test suite, go into Devise's top-level directory and run
|
122
|
+
You will usually want to write tests for your changes. To run the test suite, go into Devise's top-level directory and run `bundle install` and `bin/test`.
|
123
|
+
Devise works with multiple Ruby and Rails versions, and ActiveRecord and Mongoid ORMs, which means you can run the test suite with some modifiers: `DEVISE_ORM` and `BUNDLE_GEMFILE`.
|
124
|
+
|
125
|
+
### DEVISE_ORM
|
126
|
+
Since Devise support both Mongoid and ActiveRecord, we rely on this variable to run specific code for each ORM.
|
127
|
+
The default value of `DEVISE_ORM` is `active_record`. To run the tests for mongoid, you can pass `mongoid`:
|
128
|
+
```
|
129
|
+
DEVISE_ORM=mongoid bin/test
|
130
|
+
|
131
|
+
==> Devise.orm = :mongoid
|
132
|
+
```
|
133
|
+
When running the tests for Mongoid, you will need to have a MongoDB server (version 2.0 or newer) running on your system.
|
134
|
+
|
135
|
+
Please note that the command output will show the variable value being used.
|
136
|
+
|
137
|
+
### BUNDLE_GEMFILE
|
138
|
+
We can use this variable to tell bundler what Gemfile it should use (instead of the one in the current directory).
|
139
|
+
Inside the [gemfiles](https://github.com/plataformatec/devise/tree/master/gemfiles) directory, we have one for each version of Rails we support. When you send us a pull request, it may happen that the test suite breaks on Travis using some of them. If that's the case, you can simulate the same environment using the `BUNDLE_GEMFILE` variable.
|
140
|
+
For example, if the tests broke using Ruby 2.4.2 and Rails 4.1, you can do the following:
|
141
|
+
```bash
|
142
|
+
rbenv shell 2.4.2 # or rvm use 2.4.2
|
143
|
+
BUNDLE_GEMFILE=gemfiles/Gemfile.rails-4.1-stable bundle install
|
144
|
+
BUNDLE_GEMFILE=gemfiles/Gemfile.rails-4.1-stable bin/test
|
145
|
+
```
|
146
|
+
|
147
|
+
You can also combine both of them if the tests broke for Mongoid:
|
148
|
+
```bash
|
149
|
+
BUNDLE_GEMFILE=gemfiles/Gemfile.rails-4.1-stable bundle install
|
150
|
+
BUNDLE_GEMFILE=gemfiles/Gemfile.rails-4.1-stable DEVISE_ORM=mongoid bin/test
|
151
|
+
```
|
152
|
+
|
153
|
+
### Running tests
|
154
|
+
Devise uses [Mini Test](https://github.com/seattlerb/minitest) as test framework.
|
155
|
+
|
156
|
+
* Running all tests:
|
157
|
+
```bash
|
158
|
+
bin/test
|
159
|
+
```
|
160
|
+
|
161
|
+
* Running tests for an specific file:
|
162
|
+
```bash
|
163
|
+
bin/test test/models/trackable_test.rb
|
164
|
+
```
|
165
|
+
|
166
|
+
* Running a specific test given a regex:
|
167
|
+
```bash
|
168
|
+
bin/test test/models/trackable_test.rb:16
|
169
|
+
```
|
82
170
|
|
83
171
|
## Starting with Rails?
|
84
172
|
|
@@ -86,43 +174,46 @@ If you are building your first Rails application, we recommend you *do not* use
|
|
86
174
|
|
87
175
|
* Michael Hartl's online book: https://www.railstutorial.org/book/modeling_users
|
88
176
|
* Ryan Bates' Railscast: http://railscasts.com/episodes/250-authentication-from-scratch
|
89
|
-
* Codecademy's Ruby on Rails: Authentication and Authorization:
|
177
|
+
* Codecademy's Ruby on Rails: Authentication and Authorization: https://www.codecademy.com/learn/rails-auth
|
90
178
|
|
91
179
|
Once you have solidified your understanding of Rails and authentication mechanisms, we assure you Devise will be very pleasant to work with. :smiley:
|
92
180
|
|
93
181
|
## Getting started
|
94
182
|
|
95
|
-
Devise
|
183
|
+
Devise 4.0 works with Rails 4.1 onwards. Add the following line to your Gemfile:
|
96
184
|
|
97
185
|
```ruby
|
98
186
|
gem 'devise'
|
99
187
|
```
|
100
188
|
|
101
|
-
|
189
|
+
Then run `bundle install`
|
102
190
|
|
103
|
-
|
191
|
+
Next, you need to run the generator:
|
104
192
|
|
105
193
|
```console
|
106
|
-
rails generate devise:install
|
194
|
+
$ rails generate devise:install
|
107
195
|
```
|
108
196
|
|
109
|
-
|
197
|
+
At this point, a number of instructions will appear in the console. Among these instructions, you'll need to set up the default URL options for the Devise mailer in each environment. Here is a possible configuration for `config/environments/development.rb`:
|
110
198
|
|
111
|
-
```
|
112
|
-
|
199
|
+
```ruby
|
200
|
+
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
|
113
201
|
```
|
114
202
|
|
115
|
-
|
203
|
+
The generator will install an initializer which describes ALL of Devise's configuration options. It is *imperative* that you take a look at it. When you are done, you are ready to add Devise to any of your models using the generator.
|
116
204
|
|
117
|
-
Next, check the MODEL for any additional configuration options you might want to add, such as confirmable or lockable. If you add an option, be sure to inspect the migration file (created by the generator if your ORM supports them) and uncomment the appropriate section. For example, if you add the confirmable option in the model, you'll need to uncomment the Confirmable section in the migration. Then run `rake db:migrate`
|
118
205
|
|
119
|
-
|
206
|
+
In the following command you will replace `MODEL` with the class name used for the application’s users (it’s frequently `User` but could also be `Admin`). This will create a model (if one does not exist) and configure it with the default Devise modules. The generator also configures your `config/routes.rb` file to point to the Devise controller.
|
120
207
|
|
121
|
-
```
|
122
|
-
|
208
|
+
```console
|
209
|
+
$ rails generate devise MODEL
|
123
210
|
```
|
124
211
|
|
125
|
-
|
212
|
+
Next, check the MODEL for any additional configuration options you might want to add, such as confirmable or lockable. If you add an option, be sure to inspect the migration file (created by the generator if your ORM supports them) and uncomment the appropriate section. For example, if you add the confirmable option in the model, you'll need to uncomment the Confirmable section in the migration.
|
213
|
+
|
214
|
+
Then run `rails db:migrate`
|
215
|
+
|
216
|
+
You should restart your application after changing Devise's configuration options (this includes stopping spring). Otherwise, you will run into strange errors, for example, users being unable to login and route helpers being undefined.
|
126
217
|
|
127
218
|
### Controller filters and helpers
|
128
219
|
|
@@ -132,6 +223,8 @@ Devise will create some helpers to use inside your controllers and views. To set
|
|
132
223
|
before_action :authenticate_user!
|
133
224
|
```
|
134
225
|
|
226
|
+
For Rails 5, note that `protect_from_forgery` is no longer prepended to the `before_action` chain, so if you have set `authenticate_user` before `protect_from_forgery`, your request will result in "Can't verify CSRF token authenticity." To resolve this, either change the order in which you call them, or use `protect_from_forgery prepend: true`.
|
227
|
+
|
135
228
|
If your devise model is something other than User, replace "_user" with "_yourmodel". The same logic applies to the instructions below.
|
136
229
|
|
137
230
|
To verify if a user is signed in, use the following helper:
|
@@ -155,7 +248,7 @@ user_session
|
|
155
248
|
After signing in a user, confirming the account or updating the password, Devise will look for a scoped root path to redirect to. For instance, when using a `:user` resource, the `user_root_path` will be used if it exists; otherwise, the default `root_path` will be used. This means that you need to set the root inside your routes:
|
156
249
|
|
157
250
|
```ruby
|
158
|
-
root to:
|
251
|
+
root to: 'home#index'
|
159
252
|
```
|
160
253
|
|
161
254
|
You can also override `after_sign_in_path_for` and `after_sign_out_path_for` to customize your redirect hooks.
|
@@ -174,19 +267,23 @@ member_session
|
|
174
267
|
|
175
268
|
### Configuring Models
|
176
269
|
|
177
|
-
The Devise method in your models also accepts some options to configure its modules. For example, you can choose the cost of the
|
270
|
+
The Devise method in your models also accepts some options to configure its modules. For example, you can choose the cost of the hashing algorithm with:
|
178
271
|
|
179
272
|
```ruby
|
180
|
-
devise :database_authenticatable, :registerable, :confirmable, :recoverable, stretches:
|
273
|
+
devise :database_authenticatable, :registerable, :confirmable, :recoverable, stretches: 12
|
181
274
|
```
|
182
275
|
|
183
276
|
Besides `:stretches`, you can define `:pepper`, `:encryptor`, `:confirm_within`, `:remember_for`, `:timeout_in`, `:unlock_in` among other options. For more details, see the initializer file that was created when you invoked the "devise:install" generator described above. This file is usually located at `/config/initializers/devise.rb`.
|
184
277
|
|
185
278
|
### Strong Parameters
|
186
279
|
|
280
|
+
![The Parameter Sanitizer API has changed for Devise 4](http://messages.hellobits.com/warning.svg?message=The%20Parameter%20Sanitizer%20API%20has%20changed%20for%20Devise%204)
|
281
|
+
|
282
|
+
*For previous Devise versions see https://github.com/plataformatec/devise/tree/3-stable#strong-parameters*
|
283
|
+
|
187
284
|
When you customize your own views, you may end up adding new attributes to forms. Rails 4 moved the parameter sanitization from the model to the controller, causing Devise to handle this concern at the controller as well.
|
188
285
|
|
189
|
-
There are just three actions in Devise that allow any set of parameters to be passed down to the model, therefore requiring sanitization. Their names and
|
286
|
+
There are just three actions in Devise that allow any set of parameters to be passed down to the model, therefore requiring sanitization. Their names and default permitted parameters are:
|
190
287
|
|
191
288
|
* `sign_in` (`Devise::SessionsController#create`) - Permits only the authentication keys (like `email`)
|
192
289
|
* `sign_up` (`Devise::RegistrationsController#create`) - Permits authentication keys plus `password` and `password_confirmation`
|
@@ -201,18 +298,34 @@ class ApplicationController < ActionController::Base
|
|
201
298
|
protected
|
202
299
|
|
203
300
|
def configure_permitted_parameters
|
204
|
-
devise_parameter_sanitizer.
|
301
|
+
devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
|
205
302
|
end
|
206
303
|
end
|
207
304
|
```
|
208
305
|
|
209
|
-
The above works for any additional fields where the parameters are simple scalar types. If you have nested attributes (say you're using `accepts_nested_attributes_for`), then you will need to tell devise about those nestings and types
|
306
|
+
The above works for any additional fields where the parameters are simple scalar types. If you have nested attributes (say you're using `accepts_nested_attributes_for`), then you will need to tell devise about those nestings and types:
|
307
|
+
|
308
|
+
```ruby
|
309
|
+
class ApplicationController < ActionController::Base
|
310
|
+
before_action :configure_permitted_parameters, if: :devise_controller?
|
311
|
+
|
312
|
+
protected
|
313
|
+
|
314
|
+
def configure_permitted_parameters
|
315
|
+
devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, address_attributes: [:country, :state, :city, :area, :postal_code]])
|
316
|
+
end
|
317
|
+
end
|
318
|
+
```
|
319
|
+
|
320
|
+
Devise allows you to completely change Devise defaults or invoke custom behaviour by passing a block:
|
210
321
|
|
211
322
|
To permit simple scalar values for username and email, use this
|
212
323
|
|
213
324
|
```ruby
|
214
325
|
def configure_permitted_parameters
|
215
|
-
devise_parameter_sanitizer.
|
326
|
+
devise_parameter_sanitizer.permit(:sign_in) do |user_params|
|
327
|
+
user_params.permit(:username, :email)
|
328
|
+
end
|
216
329
|
end
|
217
330
|
```
|
218
331
|
|
@@ -220,7 +333,9 @@ If you have some checkboxes that express the roles a user may take on registrati
|
|
220
333
|
|
221
334
|
```ruby
|
222
335
|
def configure_permitted_parameters
|
223
|
-
devise_parameter_sanitizer.
|
336
|
+
devise_parameter_sanitizer.permit(:sign_up) do |user_params|
|
337
|
+
user_params.permit({ roles: [] }, :email, :password, :password_confirmation)
|
338
|
+
end
|
224
339
|
end
|
225
340
|
```
|
226
341
|
For the list of permitted scalars, and how to declare permitted keys in nested hashes and arrays, see
|
@@ -231,8 +346,9 @@ If you have multiple Devise models, you may want to set up a different parameter
|
|
231
346
|
|
232
347
|
```ruby
|
233
348
|
class User::ParameterSanitizer < Devise::ParameterSanitizer
|
234
|
-
def
|
235
|
-
|
349
|
+
def initialize(*)
|
350
|
+
super
|
351
|
+
permit(:sign_up, keys: [:username, :email])
|
236
352
|
end
|
237
353
|
end
|
238
354
|
```
|
@@ -262,7 +378,7 @@ We built Devise to help you quickly develop an application that uses authenticat
|
|
262
378
|
Since Devise is an engine, all its views are packaged inside the gem. These views will help you get started, but after some time you may want to change them. If this is the case, you just need to invoke the following generator, and it will copy all views to your application:
|
263
379
|
|
264
380
|
```console
|
265
|
-
rails generate devise:views
|
381
|
+
$ rails generate devise:views
|
266
382
|
```
|
267
383
|
|
268
384
|
If you have more than one Devise model in your application (such as `User` and `Admin`), you will notice that Devise uses the same views for all models. Fortunately, Devise offers an easy way to customize views. All you need to do is set `config.scoped_views = true` inside the `config/initializers/devise.rb` file.
|
@@ -270,14 +386,14 @@ If you have more than one Devise model in your application (such as `User` and `
|
|
270
386
|
After doing so, you will be able to have views based on the role like `users/sessions/new` and `admins/sessions/new`. If no view is found within the scope, Devise will use the default view at `devise/sessions/new`. You can also use the generator to generate scoped views:
|
271
387
|
|
272
388
|
```console
|
273
|
-
rails generate devise:views users
|
389
|
+
$ rails generate devise:views users
|
274
390
|
```
|
275
391
|
|
276
392
|
If you would like to generate only a few sets of views, like the ones for the `registerable` and `confirmable` module,
|
277
393
|
you can pass a list of modules to the generator with the `-v` flag.
|
278
394
|
|
279
395
|
```console
|
280
|
-
rails generate devise:views -v registrations confirmations
|
396
|
+
$ rails generate devise:views -v registrations confirmations
|
281
397
|
```
|
282
398
|
|
283
399
|
### Configuring controllers
|
@@ -287,7 +403,7 @@ If the customization at the views level is not enough, you can customize each co
|
|
287
403
|
1. Create your custom controllers using the generator which requires a scope:
|
288
404
|
|
289
405
|
```console
|
290
|
-
rails generate devise:controllers [scope]
|
406
|
+
$ rails generate devise:controllers [scope]
|
291
407
|
```
|
292
408
|
|
293
409
|
If you specify `users` as the scope, controllers will be created in `app/controllers/users/`.
|
@@ -302,11 +418,12 @@ If the customization at the views level is not enough, you can customize each co
|
|
302
418
|
...
|
303
419
|
end
|
304
420
|
```
|
421
|
+
(Use the -c flag to specify a controller, for example: `rails generate devise:controllers users -c=sessions`)
|
305
422
|
|
306
423
|
2. Tell the router to use this controller:
|
307
424
|
|
308
425
|
```ruby
|
309
|
-
devise_for :users, controllers: { sessions:
|
426
|
+
devise_for :users, controllers: { sessions: 'users/sessions' }
|
310
427
|
```
|
311
428
|
|
312
429
|
3. Copy the views from `devise/sessions` to `users/sessions`. Since the controller was changed, it won't use the default views located in `devise/sessions`.
|
@@ -344,21 +461,27 @@ Remember that Devise uses flash messages to let users know if sign in was succes
|
|
344
461
|
Devise also ships with default routes. If you need to customize them, you should probably be able to do it through the devise_for method. It accepts several options like :class_name, :path_prefix and so on, including the possibility to change path names for I18n:
|
345
462
|
|
346
463
|
```ruby
|
347
|
-
devise_for :users, path:
|
464
|
+
devise_for :users, path: 'auth', path_names: { sign_in: 'login', sign_out: 'logout', password: 'secret', confirmation: 'verification', unlock: 'unblock', registration: 'register', sign_up: 'cmon_let_me_in' }
|
348
465
|
```
|
349
466
|
|
350
|
-
Be sure to check `devise_for` documentation for details.
|
467
|
+
Be sure to check `devise_for` [documentation](http://www.rubydoc.info/github/plataformatec/devise/master/ActionDispatch/Routing/Mapper%3Adevise_for) for details.
|
351
468
|
|
352
469
|
If you have the need for more deep customization, for instance to also allow "/sign_in" besides "/users/sign_in", all you need to do is create your routes normally and wrap them in a `devise_scope` block in the router:
|
353
470
|
|
354
471
|
```ruby
|
355
472
|
devise_scope :user do
|
356
|
-
get
|
473
|
+
get 'sign_in', to: 'devise/sessions#new'
|
357
474
|
end
|
358
475
|
```
|
359
476
|
|
360
477
|
This way, you tell Devise to use the scope `:user` when "/sign_in" is accessed. Notice `devise_scope` is also aliased as `as` in your router.
|
361
478
|
|
479
|
+
Please note: You will still need to add `devise_for` in your routes in order to use helper methods such as `current_user`.
|
480
|
+
|
481
|
+
```ruby
|
482
|
+
devise_for :users, skip: :all
|
483
|
+
```
|
484
|
+
|
362
485
|
### I18n
|
363
486
|
|
364
487
|
Devise uses flash messages with I18n, in conjunction with the flash keys :notice and :alert. To customize your app, you can set up your locale file:
|
@@ -403,48 +526,101 @@ Caution: Devise Controllers inherit from ApplicationController. If your app uses
|
|
403
526
|
|
404
527
|
### Test helpers
|
405
528
|
|
406
|
-
Devise includes some test helpers for
|
529
|
+
Devise includes some test helpers for controller and integration tests.
|
530
|
+
In order to use them, you need to include the respective module in your test
|
531
|
+
cases/specs.
|
532
|
+
|
533
|
+
### Controller tests
|
534
|
+
|
535
|
+
Controller tests require that you include `Devise::Test::ControllerHelpers` on
|
536
|
+
your test case or its parent `ActionController::TestCase` superclass.
|
537
|
+
For Rails 5, include `Devise::Test::IntegrationHelpers` instead, since the superclass
|
538
|
+
for controller tests has been changed to ActionDispatch::IntegrationTest
|
539
|
+
(for more details, see the [Integration tests](#integration-tests) section).
|
407
540
|
|
408
541
|
```ruby
|
409
|
-
class ActionController::TestCase
|
410
|
-
include Devise::
|
542
|
+
class PostsControllerTest < ActionController::TestCase
|
543
|
+
include Devise::Test::ControllerHelpers
|
411
544
|
end
|
412
545
|
```
|
413
546
|
|
414
|
-
If you're using RSpec, you can put the following inside a file named
|
547
|
+
If you're using RSpec, you can put the following inside a file named
|
548
|
+
`spec/support/devise.rb` or in your `spec/spec_helper.rb` (or
|
549
|
+
`spec/rails_helper.rb` if you are using `rspec-rails`):
|
415
550
|
|
416
551
|
```ruby
|
417
552
|
RSpec.configure do |config|
|
418
|
-
config.include Devise::
|
553
|
+
config.include Devise::Test::ControllerHelpers, type: :controller
|
554
|
+
config.include Devise::Test::ControllerHelpers, type: :view
|
419
555
|
end
|
420
556
|
```
|
421
557
|
|
422
558
|
Just be sure that this inclusion is made *after* the `require 'rspec/rails'` directive.
|
423
559
|
|
424
|
-
Now you are ready to use the `sign_in` and `sign_out` methods
|
560
|
+
Now you are ready to use the `sign_in` and `sign_out` methods on your controller
|
561
|
+
tests:
|
425
562
|
|
426
563
|
```ruby
|
427
|
-
sign_in
|
428
|
-
sign_in @user
|
564
|
+
sign_in @user
|
565
|
+
sign_in @user, scope: :admin
|
566
|
+
```
|
567
|
+
|
568
|
+
If you are testing Devise internal controllers or a controller that inherits
|
569
|
+
from Devise's, you need to tell Devise which mapping should be used before a
|
570
|
+
request. This is necessary because Devise gets this information from the router,
|
571
|
+
but since controller tests do not pass through the router, it needs to be stated
|
572
|
+
explicitly. For example, if you are testing the user scope, simply use:
|
573
|
+
|
574
|
+
```ruby
|
575
|
+
test 'GET new' do
|
576
|
+
# Mimic the router behavior of setting the Devise scope through the env.
|
577
|
+
@request.env['devise.mapping'] = Devise.mappings[:user]
|
578
|
+
|
579
|
+
# Use the sign_in helper to sign in a fixture `User` record.
|
580
|
+
sign_in users(:alice)
|
429
581
|
|
430
|
-
|
431
|
-
|
582
|
+
get :new
|
583
|
+
|
584
|
+
# assert something
|
585
|
+
end
|
432
586
|
```
|
433
587
|
|
434
|
-
|
588
|
+
### Integration tests
|
435
589
|
|
436
|
-
|
590
|
+
Integration test helpers are available by including the
|
591
|
+
`Devise::Test::IntegrationHelpers` module.
|
437
592
|
|
438
|
-
|
593
|
+
```ruby
|
594
|
+
class PostsTests < ActionDispatch::IntegrationTest
|
595
|
+
include Devise::Test::IntegrationHelpers
|
596
|
+
end
|
597
|
+
```
|
439
598
|
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
599
|
+
Now you can use the following `sign_in` and `sign_out` methods in your integration
|
600
|
+
tests:
|
601
|
+
|
602
|
+
```ruby
|
603
|
+
sign_in users(:bob)
|
604
|
+
sign_in users(:bob), scope: :admin
|
605
|
+
|
606
|
+
sign_out :user
|
607
|
+
```
|
608
|
+
|
609
|
+
RSpec users can include the `IntegrationHelpers` module on their `:feature` specs.
|
610
|
+
|
611
|
+
```ruby
|
612
|
+
RSpec.configure do |config|
|
613
|
+
config.include Devise::Test::IntegrationHelpers, type: :feature
|
614
|
+
end
|
615
|
+
```
|
616
|
+
|
617
|
+
Unlike controller tests, integration tests do not need to supply the
|
618
|
+
`devise.mapping` `env` value, as the mapping can be inferred by the routes that
|
619
|
+
are executed in your tests.
|
444
620
|
|
445
621
|
You can read more about testing your Rails 3 - Rails 4 controllers with RSpec in the wiki:
|
446
622
|
|
447
|
-
* https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-
|
623
|
+
* https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-(and-RSpec)
|
448
624
|
|
449
625
|
### OmniAuth
|
450
626
|
|
@@ -477,7 +653,7 @@ devise :database_authenticatable, :timeoutable
|
|
477
653
|
devise_for :admins
|
478
654
|
|
479
655
|
# Inside your protected controller
|
480
|
-
|
656
|
+
before_action :authenticate_admin!
|
481
657
|
|
482
658
|
# Inside your controllers and views
|
483
659
|
admin_signed_in?
|
@@ -519,6 +695,17 @@ config.log_level = :warn
|
|
519
695
|
|
520
696
|
Devise supports ActiveRecord (default) and Mongoid. To select another ORM, simply require it in the initializer file.
|
521
697
|
|
698
|
+
### Rails API Mode
|
699
|
+
|
700
|
+
Rails 5+ has a built-in [API Mode](https://edgeguides.rubyonrails.org/api_app.html) which optimizes Rails for use as an API (only). One of the side effects is that it changes the order of the middleware stack, and this can cause problems for `Devise::Test::IntegrationHelpers`. This problem usually surfaces as an ```undefined method `[]=' for nil:NilClass``` error when using integration test helpers, such as `#sign_in`. The solution is simply to reorder the middlewares by adding the following to test.rb:
|
701
|
+
|
702
|
+
```ruby
|
703
|
+
Rails.application.config.middleware.insert_before Warden::Manager, ActionDispatch::Cookies
|
704
|
+
Rails.application.config.middleware.insert_before Warden::Manager, ActionDispatch::Session::CookieStore
|
705
|
+
```
|
706
|
+
|
707
|
+
For a deeper understanding of this, review [this issue](https://github.com/plataformatec/devise/issues/4696).
|
708
|
+
|
522
709
|
## Additional information
|
523
710
|
|
524
711
|
### Heroku
|
@@ -545,6 +732,6 @@ https://github.com/plataformatec/devise/graphs/contributors
|
|
545
732
|
|
546
733
|
## License
|
547
734
|
|
548
|
-
MIT License. Copyright 2009-
|
735
|
+
MIT License. Copyright 2009-2019 Plataformatec. http://plataformatec.com.br
|
549
736
|
|
550
737
|
You are not granted rights or licenses to the trademarks of Plataformatec, including without limitation the Devise name or logo.
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Devise::ConfirmationsController < DeviseController
|
2
4
|
# GET /resource/confirmation/new
|
3
5
|
def new
|
@@ -22,7 +24,7 @@ class Devise::ConfirmationsController < DeviseController
|
|
22
24
|
yield resource if block_given?
|
23
25
|
|
24
26
|
if resource.errors.empty?
|
25
|
-
set_flash_message(:notice, :confirmed)
|
27
|
+
set_flash_message!(:notice, :confirmed)
|
26
28
|
respond_with_navigational(resource){ redirect_to after_confirmation_path_for(resource_name, resource) }
|
27
29
|
else
|
28
30
|
respond_with_navigational(resource.errors, status: :unprocessable_entity){ render :new }
|
@@ -1,26 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Devise::OmniauthCallbacksController < DeviseController
|
2
|
-
|
4
|
+
prepend_before_action { request.env["devise.skip_timeout"] = true }
|
3
5
|
|
4
6
|
def passthru
|
5
|
-
render status: 404,
|
7
|
+
render status: 404, plain: "Not found. Authentication passthru."
|
6
8
|
end
|
7
9
|
|
8
10
|
def failure
|
9
|
-
set_flash_message :alert, :failure, kind: OmniAuth::Utils.camelize(failed_strategy.name), reason: failure_message
|
11
|
+
set_flash_message! :alert, :failure, kind: OmniAuth::Utils.camelize(failed_strategy.name), reason: failure_message
|
10
12
|
redirect_to after_omniauth_failure_path_for(resource_name)
|
11
13
|
end
|
12
14
|
|
13
15
|
protected
|
14
16
|
|
15
17
|
def failed_strategy
|
16
|
-
env["omniauth.error.strategy"]
|
18
|
+
request.respond_to?(:get_header) ? request.get_header("omniauth.error.strategy") : request.env["omniauth.error.strategy"]
|
17
19
|
end
|
18
20
|
|
19
21
|
def failure_message
|
20
|
-
exception = env["omniauth.error"]
|
22
|
+
exception = request.respond_to?(:get_header) ? request.get_header("omniauth.error") : request.env["omniauth.error"]
|
21
23
|
error = exception.error_reason if exception.respond_to?(:error_reason)
|
22
24
|
error ||= exception.error if exception.respond_to?(:error)
|
23
|
-
error ||= env["omniauth.error.type"].to_s
|
25
|
+
error ||= (request.respond_to?(:get_header) ? request.get_header("omniauth.error.type") : request.env["omniauth.error.type"]).to_s
|
24
26
|
error.to_s.humanize if error
|
25
27
|
end
|
26
28
|
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class Devise::PasswordsController < DeviseController
|
2
|
-
|
4
|
+
prepend_before_action :require_no_authentication
|
3
5
|
# Render the #edit only if coming from a reset password email link
|
4
|
-
|
6
|
+
append_before_action :assert_reset_token_passed, only: :edit
|
5
7
|
|
6
8
|
# GET /resource/password/new
|
7
9
|
def new
|
@@ -36,13 +38,15 @@ class Devise::PasswordsController < DeviseController
|
|
36
38
|
resource.unlock_access! if unlockable?(resource)
|
37
39
|
if Devise.sign_in_after_reset_password
|
38
40
|
flash_message = resource.active_for_authentication? ? :updated : :updated_not_active
|
39
|
-
set_flash_message(:notice, flash_message)
|
41
|
+
set_flash_message!(:notice, flash_message)
|
42
|
+
resource.after_database_authentication
|
40
43
|
sign_in(resource_name, resource)
|
41
44
|
else
|
42
|
-
set_flash_message(:notice, :updated_not_active)
|
45
|
+
set_flash_message!(:notice, :updated_not_active)
|
43
46
|
end
|
44
47
|
respond_with resource, location: after_resetting_password_path_for(resource)
|
45
48
|
else
|
49
|
+
set_minimum_password_length
|
46
50
|
respond_with resource
|
47
51
|
end
|
48
52
|
end
|