devise_token_auth 0.1.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/LICENSE +13 -0
- data/README.md +97 -0
- data/Rakefile +12 -4
- data/app/controllers/devise_token_auth/application_controller.rb +89 -22
- data/app/controllers/devise_token_auth/concerns/resource_finder.rb +58 -0
- data/app/controllers/devise_token_auth/concerns/set_user_by_token.rb +199 -0
- data/app/controllers/devise_token_auth/confirmations_controller.rb +79 -14
- data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +284 -0
- data/app/controllers/devise_token_auth/passwords_controller.rb +196 -35
- data/app/controllers/devise_token_auth/registrations_controller.rb +191 -20
- data/app/controllers/devise_token_auth/sessions_controller.rb +130 -21
- data/app/controllers/devise_token_auth/token_validations_controller.rb +31 -0
- data/app/controllers/devise_token_auth/unlocks_controller.rb +94 -0
- data/app/models/devise_token_auth/concerns/active_record_support.rb +18 -0
- data/app/models/devise_token_auth/concerns/confirmable_support.rb +28 -0
- data/app/models/devise_token_auth/concerns/mongoid_support.rb +19 -0
- data/app/models/devise_token_auth/concerns/tokens_serialization.rb +31 -0
- data/app/models/devise_token_auth/concerns/user.rb +287 -0
- data/app/models/devise_token_auth/concerns/user_omniauth_callbacks.rb +35 -0
- data/app/validators/devise_token_auth_email_validator.rb +31 -0
- data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/devise_token_auth/omniauth_external_window.html.erb +38 -0
- data/config/locales/da-DK.yml +52 -0
- data/config/locales/de.yml +51 -0
- data/config/locales/en.yml +60 -0
- data/config/locales/es.yml +51 -0
- data/config/locales/fa.yml +60 -0
- data/config/locales/fr.yml +51 -0
- data/config/locales/he.yml +52 -0
- data/config/locales/it.yml +48 -0
- data/config/locales/ja.yml +60 -0
- data/config/locales/ko.yml +51 -0
- data/config/locales/nl.yml +32 -0
- data/config/locales/pl.yml +51 -0
- data/config/locales/pt-BR.yml +48 -0
- data/config/locales/pt.yml +51 -0
- data/config/locales/ro.yml +48 -0
- data/config/locales/ru.yml +52 -0
- data/config/locales/sq.yml +48 -0
- data/config/locales/sv.yml +52 -0
- data/config/locales/uk.yml +61 -0
- data/config/locales/vi.yml +52 -0
- data/config/locales/zh-CN.yml +48 -0
- data/config/locales/zh-HK.yml +50 -0
- data/config/locales/zh-TW.yml +50 -0
- data/lib/devise_token_auth/blacklist.rb +6 -0
- data/lib/devise_token_auth/controllers/helpers.rb +157 -0
- data/lib/devise_token_auth/controllers/url_helpers.rb +10 -0
- data/lib/devise_token_auth/engine.rb +100 -0
- data/lib/devise_token_auth/errors.rb +8 -0
- data/lib/devise_token_auth/rails/routes.rb +135 -0
- data/lib/devise_token_auth/token_factory.rb +126 -0
- data/lib/devise_token_auth/url.rb +44 -0
- data/lib/devise_token_auth/version.rb +3 -1
- data/lib/devise_token_auth.rb +11 -2
- data/lib/generators/devise_token_auth/USAGE +27 -4
- data/lib/generators/devise_token_auth/install_generator.rb +91 -0
- data/lib/generators/devise_token_auth/install_generator_helpers.rb +98 -0
- data/lib/generators/devise_token_auth/install_mongoid_generator.rb +46 -0
- data/lib/generators/devise_token_auth/install_views_generator.rb +18 -0
- data/lib/generators/devise_token_auth/templates/devise_token_auth.rb +66 -0
- data/lib/generators/devise_token_auth/templates/devise_token_auth_create_users.rb.erb +49 -0
- data/lib/generators/devise_token_auth/templates/user.rb.erb +9 -0
- data/lib/generators/devise_token_auth/templates/user_mongoid.rb.erb +56 -0
- data/lib/tasks/devise_token_auth_tasks.rake +2 -0
- data/test/controllers/custom/custom_confirmations_controller_test.rb +25 -0
- data/test/controllers/custom/custom_omniauth_callbacks_controller_test.rb +33 -0
- data/test/controllers/custom/custom_passwords_controller_test.rb +79 -0
- data/test/controllers/custom/custom_registrations_controller_test.rb +63 -0
- data/test/controllers/custom/custom_sessions_controller_test.rb +39 -0
- data/test/controllers/custom/custom_token_validations_controller_test.rb +42 -0
- data/test/controllers/demo_group_controller_test.rb +151 -0
- data/test/controllers/demo_mang_controller_test.rb +313 -0
- data/test/controllers/demo_user_controller_test.rb +658 -0
- data/test/controllers/devise_token_auth/confirmations_controller_test.rb +275 -0
- data/test/controllers/devise_token_auth/omniauth_callbacks_controller_test.rb +438 -0
- data/test/controllers/devise_token_auth/passwords_controller_test.rb +893 -0
- data/test/controllers/devise_token_auth/registrations_controller_test.rb +920 -0
- data/test/controllers/devise_token_auth/sessions_controller_test.rb +605 -0
- data/test/controllers/devise_token_auth/token_validations_controller_test.rb +142 -0
- data/test/controllers/devise_token_auth/unlocks_controller_test.rb +235 -0
- data/test/controllers/overrides/confirmations_controller_test.rb +47 -0
- data/test/controllers/overrides/omniauth_callbacks_controller_test.rb +53 -0
- data/test/controllers/overrides/passwords_controller_test.rb +64 -0
- data/test/controllers/overrides/registrations_controller_test.rb +46 -0
- data/test/controllers/overrides/sessions_controller_test.rb +35 -0
- data/test/controllers/overrides/token_validations_controller_test.rb +43 -0
- data/test/dummy/app/active_record/confirmable_user.rb +11 -0
- data/test/dummy/app/active_record/lockable_user.rb +7 -0
- data/test/dummy/app/active_record/mang.rb +5 -0
- data/test/dummy/app/active_record/only_email_user.rb +7 -0
- data/test/dummy/app/active_record/scoped_user.rb +9 -0
- data/test/dummy/app/active_record/unconfirmable_user.rb +9 -0
- data/test/dummy/app/active_record/unregisterable_user.rb +9 -0
- data/test/dummy/app/active_record/user.rb +6 -0
- data/test/dummy/app/controllers/application_controller.rb +12 -3
- data/test/dummy/app/controllers/auth_origin_controller.rb +7 -0
- data/test/dummy/app/controllers/custom/confirmations_controller.rb +13 -0
- data/test/dummy/app/controllers/custom/omniauth_callbacks_controller.rb +13 -0
- data/test/dummy/app/controllers/custom/passwords_controller.rb +39 -0
- data/test/dummy/app/controllers/custom/registrations_controller.rb +39 -0
- data/test/dummy/app/controllers/custom/sessions_controller.rb +29 -0
- data/test/dummy/app/controllers/custom/token_validations_controller.rb +19 -0
- data/test/dummy/app/controllers/demo_group_controller.rb +15 -0
- data/test/dummy/app/controllers/demo_mang_controller.rb +14 -0
- data/test/dummy/app/controllers/demo_user_controller.rb +27 -0
- data/test/dummy/app/controllers/overrides/confirmations_controller.rb +29 -0
- data/test/dummy/app/controllers/overrides/omniauth_callbacks_controller.rb +16 -0
- data/test/dummy/app/controllers/overrides/passwords_controller.rb +36 -0
- data/test/dummy/app/controllers/overrides/registrations_controller.rb +29 -0
- data/test/dummy/app/controllers/overrides/sessions_controller.rb +36 -0
- data/test/dummy/app/controllers/overrides/token_validations_controller.rb +23 -0
- data/test/dummy/app/helpers/application_helper.rb +1056 -0
- data/test/dummy/app/models/concerns/favorite_color.rb +19 -0
- data/test/dummy/app/mongoid/confirmable_user.rb +52 -0
- data/test/dummy/app/mongoid/lockable_user.rb +38 -0
- data/test/dummy/app/mongoid/mang.rb +46 -0
- data/test/dummy/app/mongoid/only_email_user.rb +33 -0
- data/test/dummy/app/mongoid/scoped_user.rb +50 -0
- data/test/dummy/app/mongoid/unconfirmable_user.rb +44 -0
- data/test/dummy/app/mongoid/unregisterable_user.rb +47 -0
- data/test/dummy/app/mongoid/user.rb +49 -0
- data/test/dummy/app/views/layouts/application.html.erb +0 -2
- data/test/dummy/config/application.rb +25 -8
- data/test/dummy/config/application.yml.bk +0 -0
- data/test/dummy/config/boot.rb +8 -2
- data/test/dummy/config/environment.rb +3 -1
- data/test/dummy/config/environments/development.rb +10 -11
- data/test/dummy/config/environments/production.rb +3 -17
- data/test/dummy/config/environments/test.rb +25 -3
- data/test/dummy/config/initializers/backtrace_silencers.rb +2 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -1
- data/{config → test/dummy/config}/initializers/devise.rb +63 -31
- data/test/dummy/config/initializers/devise_token_auth.rb +55 -0
- data/test/dummy/config/initializers/figaro.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +2 -0
- data/test/dummy/config/initializers/inflections.rb +2 -0
- data/test/dummy/config/initializers/mime_types.rb +2 -0
- data/test/dummy/config/initializers/omniauth.rb +7 -1
- data/test/dummy/config/initializers/session_store.rb +2 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +2 -0
- data/test/dummy/config/routes.rb +55 -1
- data/test/dummy/config/spring.rb +3 -0
- data/test/dummy/config.ru +14 -0
- data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +58 -0
- data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +57 -0
- data/test/dummy/db/migrate/20140829044006_add_operating_thetan_to_user.rb +8 -0
- data/test/dummy/db/migrate/20140916224624_add_favorite_color_to_mangs.rb +7 -0
- data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +55 -0
- data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +56 -0
- data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +56 -0
- data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +56 -0
- data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +56 -0
- data/test/dummy/db/migrate/20190924101113_devise_token_auth_create_confirmable_users.rb +49 -0
- data/test/dummy/db/schema.rb +180 -28
- data/test/dummy/lib/migration_database_helper.rb +43 -0
- data/test/dummy/tmp/generators/app/models/user.rb +11 -0
- data/test/dummy/tmp/generators/config/initializers/devise_token_auth.rb +66 -0
- data/{db/migrate/20140628234942_devise_token_auth_create_users.rb → test/dummy/tmp/generators/db/migrate/20240519164408_devise_token_auth_create_users.rb} +16 -23
- data/test/factories/users.rb +41 -0
- data/test/lib/devise_token_auth/blacklist_test.rb +19 -0
- data/test/lib/devise_token_auth/rails/custom_routes_test.rb +30 -0
- data/test/lib/devise_token_auth/rails/routes_test.rb +87 -0
- data/test/lib/devise_token_auth/token_factory_test.rb +191 -0
- data/test/lib/devise_token_auth/url_test.rb +26 -0
- data/test/lib/generators/devise_token_auth/install_generator_test.rb +217 -0
- data/test/lib/generators/devise_token_auth/install_generator_with_namespace_test.rb +222 -0
- data/test/lib/generators/devise_token_auth/install_views_generator_test.rb +25 -0
- data/test/models/concerns/mongoid_support_test.rb +31 -0
- data/test/models/concerns/tokens_serialization_test.rb +104 -0
- data/test/models/confirmable_user_test.rb +35 -0
- data/test/models/only_email_user_test.rb +29 -0
- data/test/models/user_test.rb +251 -0
- data/test/support/controllers/routes.rb +43 -0
- data/test/test_helper.rb +136 -10
- metadata +368 -80
- data/MIT-LICENSE +0 -20
- data/README.rdoc +0 -3
- data/app/assets/javascripts/devise_token_auth/application.js +0 -13
- data/app/assets/stylesheets/devise_token_auth/application.css +0 -15
- data/app/controllers/devise_token_auth/auth_controller.rb +0 -62
- data/app/helpers/devise_token_auth/application_helper.rb +0 -4
- data/app/models/user.rb +0 -6
- data/app/views/devise_token_auth/omniauth_success.html.erb +0 -7
- data/app/views/layouts/omniauth_response.html.erb +0 -20
- data/config/locales/devise.en.yml +0 -59
- data/config/routes.rb +0 -14
- data/lib/generators/devise_token_auth/devise_token_auth_generator.rb +0 -3
- data/test/devise_token_auth_test.rb +0 -7
- data/test/dummy/Rakefile +0 -6
- data/test/dummy/app/assets/javascripts/application.js +0 -13
- data/test/dummy/app/assets/stylesheets/application.css +0 -15
- data/test/dummy/bin/bundle +0 -3
- data/test/dummy/bin/rails +0 -4
- data/test/dummy/bin/rake +0 -4
- data/test/dummy/config/application.yml +0 -13
- data/test/dummy/config/database.yml +0 -25
- data/test/dummy/config/initializers/assets.rb +0 -8
- data/test/dummy/config/locales/en.yml +0 -23
- data/test/dummy/config/secrets.yml +0 -22
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20140629011345_devise_token_auth_create_users.devise_token_auth.rb +0 -57
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +0 -3406
- data/test/dummy/public/404.html +0 -67
- data/test/dummy/public/422.html +0 -67
- data/test/dummy/public/500.html +0 -66
- data/test/dummy/public/favicon.ico +0 -0
- data/test/integration/navigation_test.rb +0 -10
- data/test/lib/generators/devise_token_auth/devise_token_auth_generator_test.rb +0 -16
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
DeviseTokenAuth.setup do |config|
|
|
4
|
+
# By default the authorization headers will change after each request. The
|
|
5
|
+
# client is responsible for keeping track of the changing tokens. Change
|
|
6
|
+
# this to false to prevent the Authorization header from changing after
|
|
7
|
+
# each request.
|
|
8
|
+
# config.change_headers_on_each_request = true
|
|
9
|
+
|
|
10
|
+
# By default, users will need to re-authenticate after 2 weeks. This setting
|
|
11
|
+
# determines how long tokens will remain valid after they are issued.
|
|
12
|
+
# config.token_lifespan = 2.weeks
|
|
13
|
+
|
|
14
|
+
# Limiting the token_cost to just 4 in testing will increase the performance of
|
|
15
|
+
# your test suite dramatically. The possible cost value is within range from 4
|
|
16
|
+
# to 31. It is recommended to not use a value more than 10 in other environments.
|
|
17
|
+
config.token_cost = Rails.env.test? ? 4 : 10
|
|
18
|
+
|
|
19
|
+
# Sets the max number of concurrent devices per user, which is 10 by default.
|
|
20
|
+
# After this limit is reached, the oldest tokens will be removed.
|
|
21
|
+
# config.max_number_of_devices = 10
|
|
22
|
+
|
|
23
|
+
# Sometimes it's necessary to make several requests to the API at the same
|
|
24
|
+
# time. In this case, each request in the batch will need to share the same
|
|
25
|
+
# auth token. This setting determines how far apart the requests can be while
|
|
26
|
+
# still using the same auth token.
|
|
27
|
+
# config.batch_request_buffer_throttle = 5.seconds
|
|
28
|
+
|
|
29
|
+
# This route will be the prefix for all oauth2 redirect callbacks. For
|
|
30
|
+
# example, using the default '/omniauth', the github oauth2 provider will
|
|
31
|
+
# redirect successful authentications to '/omniauth/github/callback'
|
|
32
|
+
# config.omniauth_prefix = "/omniauth"
|
|
33
|
+
|
|
34
|
+
# By default sending current password is not needed for the password update.
|
|
35
|
+
# Uncomment to enforce current_password param to be checked before all
|
|
36
|
+
# attribute updates. Set it to :password if you want it to be checked only if
|
|
37
|
+
# password is updated.
|
|
38
|
+
# config.check_current_password_before_update = :attributes
|
|
39
|
+
|
|
40
|
+
# By default we will use callbacks for single omniauth.
|
|
41
|
+
# It depends on fields like email, provider and uid.
|
|
42
|
+
# config.default_callbacks = true
|
|
43
|
+
|
|
44
|
+
# Makes it possible to change the headers names
|
|
45
|
+
# config.headers_names = {
|
|
46
|
+
# :'authorization' => 'Authorization',
|
|
47
|
+
# :'access-token' => 'access-token',
|
|
48
|
+
# :'client' => 'client',
|
|
49
|
+
# :'expiry' => 'expiry',
|
|
50
|
+
# :'uid' => 'uid',
|
|
51
|
+
# :'token-type' => 'token-type'
|
|
52
|
+
# }
|
|
53
|
+
|
|
54
|
+
# Makes it possible to use custom uid column
|
|
55
|
+
# config.other_uid = "foo"
|
|
56
|
+
|
|
57
|
+
# By default, only Bearer Token authentication is implemented out of the box.
|
|
58
|
+
# If, however, you wish to integrate with legacy Devise authentication, you can
|
|
59
|
+
# do so by enabling this flag. NOTE: This feature is highly experimental!
|
|
60
|
+
# config.enable_standard_devise_support = false
|
|
61
|
+
|
|
62
|
+
# By default DeviseTokenAuth will not send confirmation email, even when including
|
|
63
|
+
# devise confirmable module. If you want to use devise confirmable module and
|
|
64
|
+
# send email, set it to true. (This is a setting for compatibility)
|
|
65
|
+
# config.send_confirmation_email = true
|
|
66
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
class DeviseTokenAuthCreate<%= user_class.pluralize.gsub("::","") %> < ActiveRecord::Migration<%= "[#{Rails::VERSION::STRING[0..2]}]" if Rails::VERSION::MAJOR > 4 %>
|
|
2
|
+
def change
|
|
3
|
+
<% table_name = @user_class.pluralize.gsub("::","").underscore %>
|
|
4
|
+
create_table(:<%= table_name %><%= primary_key_type %>) do |t|
|
|
5
|
+
## Required
|
|
6
|
+
t.string :provider, :null => false, :default => "email"
|
|
7
|
+
t.string :uid, :null => false, :default => ""
|
|
8
|
+
|
|
9
|
+
## Database authenticatable
|
|
10
|
+
t.string :encrypted_password, :null => false, :default => ""
|
|
11
|
+
|
|
12
|
+
## Recoverable
|
|
13
|
+
t.string :reset_password_token
|
|
14
|
+
t.datetime :reset_password_sent_at
|
|
15
|
+
t.boolean :allow_password_change, :default => false
|
|
16
|
+
|
|
17
|
+
## Rememberable
|
|
18
|
+
t.datetime :remember_created_at
|
|
19
|
+
|
|
20
|
+
## Confirmable
|
|
21
|
+
t.string :confirmation_token
|
|
22
|
+
t.datetime :confirmed_at
|
|
23
|
+
t.datetime :confirmation_sent_at
|
|
24
|
+
t.string :unconfirmed_email # Only if using reconfirmable
|
|
25
|
+
|
|
26
|
+
## Lockable
|
|
27
|
+
# t.integer :failed_attempts, :default => 0, :null => false # Only if lock strategy is :failed_attempts
|
|
28
|
+
# t.string :unlock_token # Only if unlock strategy is :email or :both
|
|
29
|
+
# t.datetime :locked_at
|
|
30
|
+
|
|
31
|
+
## User Info
|
|
32
|
+
t.string :name
|
|
33
|
+
t.string :nickname
|
|
34
|
+
t.string :image
|
|
35
|
+
t.string :email
|
|
36
|
+
|
|
37
|
+
## Tokens
|
|
38
|
+
<%= json_supported_database? ? 't.json :tokens' : 't.text :tokens' %>
|
|
39
|
+
|
|
40
|
+
t.timestamps
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
add_index :<%= table_name %>, :email, unique: true
|
|
44
|
+
add_index :<%= table_name %>, [:uid, :provider], unique: true
|
|
45
|
+
add_index :<%= table_name %>, :reset_password_token, unique: true
|
|
46
|
+
add_index :<%= table_name %>, :confirmation_token, unique: true
|
|
47
|
+
# add_index :<%= table_name %>, :unlock_token, unique: true
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class <%= user_class %> < ActiveRecord::Base
|
|
4
|
+
# Include default devise modules. Others available are:
|
|
5
|
+
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
|
|
6
|
+
devise :database_authenticatable, :registerable,
|
|
7
|
+
:recoverable, :rememberable, :validatable
|
|
8
|
+
include DeviseTokenAuth::Concerns::User
|
|
9
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class <%= user_class %>
|
|
4
|
+
include Mongoid::Document
|
|
5
|
+
include Mongoid::Timestamps
|
|
6
|
+
include Mongoid::Locker
|
|
7
|
+
|
|
8
|
+
field :locker_locked_at, type: Time
|
|
9
|
+
field :locker_locked_until, type: Time
|
|
10
|
+
|
|
11
|
+
locker locked_at_field: :locker_locked_at,
|
|
12
|
+
locked_until_field: :locker_locked_until
|
|
13
|
+
|
|
14
|
+
## Database authenticatable
|
|
15
|
+
field :email, type: String, default: ''
|
|
16
|
+
field :encrypted_password, type: String, default: ''
|
|
17
|
+
|
|
18
|
+
## Recoverable
|
|
19
|
+
field :reset_password_token, type: String
|
|
20
|
+
field :reset_password_sent_at, type: Time
|
|
21
|
+
field :reset_password_redirect_url, type: String
|
|
22
|
+
field :allow_password_change, type: Boolean, default: false
|
|
23
|
+
|
|
24
|
+
## Rememberable
|
|
25
|
+
field :remember_created_at, type: Time
|
|
26
|
+
|
|
27
|
+
## Confirmable
|
|
28
|
+
field :confirmation_token, type: String
|
|
29
|
+
field :confirmed_at, type: Time
|
|
30
|
+
field :confirmation_sent_at, type: Time
|
|
31
|
+
field :unconfirmed_email, type: String # Only if using reconfirmable
|
|
32
|
+
|
|
33
|
+
## Lockable
|
|
34
|
+
# field :failed_attempts, type: Integer, default: 0 # Only if lock strategy is :failed_attempts
|
|
35
|
+
# field :unlock_token, type: String # Only if unlock strategy is :email or :both
|
|
36
|
+
# field :locked_at, type: Time
|
|
37
|
+
|
|
38
|
+
## Required
|
|
39
|
+
field :provider, type: String
|
|
40
|
+
field :uid, type: String, default: ''
|
|
41
|
+
|
|
42
|
+
## Tokens
|
|
43
|
+
field :tokens, type: Hash, default: {}
|
|
44
|
+
|
|
45
|
+
# Include default devise modules. Others available are:
|
|
46
|
+
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
|
|
47
|
+
devise :database_authenticatable, :registerable,
|
|
48
|
+
:recoverable, :rememberable, :validatable
|
|
49
|
+
include DeviseTokenAuth::Concerns::User
|
|
50
|
+
|
|
51
|
+
index({ email: 1 }, { name: 'email_index', unique: true, background: true })
|
|
52
|
+
index({ reset_password_token: 1 }, { name: 'reset_password_token_index', unique: true, sparse: true, background: true })
|
|
53
|
+
index({ confirmation_token: 1 }, { name: 'confirmation_token_index', unique: true, sparse: true, background: true })
|
|
54
|
+
index({ uid: 1, provider: 1}, { name: 'uid_provider_index', unique: true, background: true })
|
|
55
|
+
# index({ unlock_token: 1 }, { name: 'unlock_token_index', unique: true, sparse: true, background: true })
|
|
56
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
class Custom::ConfirmationsControllerTest < ActionController::TestCase
|
|
6
|
+
describe Custom::ConfirmationsController do
|
|
7
|
+
include CustomControllersRoutes
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
@redirect_url = Faker::Internet.url
|
|
11
|
+
@new_user = create(:user)
|
|
12
|
+
@new_user.send_confirmation_instructions(redirect_url: @redirect_url)
|
|
13
|
+
@mail = ActionMailer::Base.deliveries.last
|
|
14
|
+
@token = @mail.body.match(/confirmation_token=([^&]*)[&"]/)[1]
|
|
15
|
+
@client_config = @mail.body.match(/config=([^&]*)&/)[1]
|
|
16
|
+
|
|
17
|
+
get :show,
|
|
18
|
+
params: { confirmation_token: @token, redirect_url: @redirect_url }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
test 'yield resource to block on show success' do
|
|
22
|
+
assert @controller.show_block_called?, 'show failed to yield resource to provided block'
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
class Custom::OmniauthCallbacksControllerTest < ActionDispatch::IntegrationTest
|
|
6
|
+
describe Custom::OmniauthCallbacksController do
|
|
7
|
+
include CustomControllersRoutes
|
|
8
|
+
|
|
9
|
+
setup do
|
|
10
|
+
OmniAuth.config.test_mode = true
|
|
11
|
+
OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(
|
|
12
|
+
provider: 'facebook',
|
|
13
|
+
uid: '123545',
|
|
14
|
+
info: {
|
|
15
|
+
name: 'swong',
|
|
16
|
+
email: 'swongsong@yandex.ru'
|
|
17
|
+
}
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
test 'yield resource to block on omniauth_success success' do
|
|
22
|
+
@redirect_url = 'http://ng-token-auth.dev/'
|
|
23
|
+
post '/nice_user_auth/facebook',
|
|
24
|
+
params: { auth_origin_url: @redirect_url,
|
|
25
|
+
omniauth_window_type: 'newWindow' }
|
|
26
|
+
|
|
27
|
+
follow_all_redirects!
|
|
28
|
+
|
|
29
|
+
assert @controller.omniauth_success_block_called?,
|
|
30
|
+
'omniauth_success failed to yield resource to provided block'
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
class Custom::PasswordsControllerTest < ActionController::TestCase
|
|
6
|
+
describe Custom::PasswordsController do
|
|
7
|
+
include CustomControllersRoutes
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
@resource = create(:user, :confirmed)
|
|
11
|
+
@redirect_url = 'http://ng-token-auth.dev'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
test 'yield resource to block on create success' do
|
|
15
|
+
post :create,
|
|
16
|
+
params: { email: @resource.email,
|
|
17
|
+
redirect_url: @redirect_url }
|
|
18
|
+
|
|
19
|
+
@mail = ActionMailer::Base.deliveries.last
|
|
20
|
+
@resource.reload
|
|
21
|
+
|
|
22
|
+
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
|
|
23
|
+
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
|
|
24
|
+
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
|
|
25
|
+
|
|
26
|
+
assert @controller.create_block_called?,
|
|
27
|
+
'create failed to yield resource to provided block'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
test 'yield resource to block on edit success' do
|
|
31
|
+
@resource = create(:user)
|
|
32
|
+
@redirect_url = 'http://ng-token-auth.dev'
|
|
33
|
+
|
|
34
|
+
post :create,
|
|
35
|
+
params: { email: @resource.email,
|
|
36
|
+
redirect_url: @redirect_url },
|
|
37
|
+
xhr: true
|
|
38
|
+
|
|
39
|
+
@mail = ActionMailer::Base.deliveries.last
|
|
40
|
+
@resource.reload
|
|
41
|
+
|
|
42
|
+
@mail_config_name = CGI.unescape(@mail.body.match(/config=([^&]*)&/)[1])
|
|
43
|
+
@mail_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)&/)[1])
|
|
44
|
+
@mail_reset_token = @mail.body.match(/reset_password_token=(.*)\"/)[1]
|
|
45
|
+
|
|
46
|
+
get :edit,
|
|
47
|
+
params: { reset_password_token: @mail_reset_token,
|
|
48
|
+
redirect_url: @mail_redirect_url },
|
|
49
|
+
xhr: true
|
|
50
|
+
@resource.reload
|
|
51
|
+
assert @controller.edit_block_called?,
|
|
52
|
+
'edit failed to yield resource to provided block'
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
test 'yield resource to block on update success' do
|
|
56
|
+
@auth_headers = @resource.create_new_auth_token
|
|
57
|
+
request.headers.merge!(@auth_headers)
|
|
58
|
+
@new_password = Faker::Internet.password
|
|
59
|
+
put :update,
|
|
60
|
+
params: { password: @new_password,
|
|
61
|
+
password_confirmation: @new_password }
|
|
62
|
+
assert @controller.update_block_called?, 'update failed to yield resource to provided block'
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
test 'yield resource to block on update success with custom json' do
|
|
66
|
+
@auth_headers = @resource.create_new_auth_token
|
|
67
|
+
request.headers.merge!(@auth_headers)
|
|
68
|
+
@new_password = Faker::Internet.password
|
|
69
|
+
put :update,
|
|
70
|
+
params: { password: @new_password,
|
|
71
|
+
password_confirmation: @new_password }
|
|
72
|
+
|
|
73
|
+
@data = JSON.parse(response.body)
|
|
74
|
+
|
|
75
|
+
assert @controller.update_block_called?, 'update failed to yield resource to provided block'
|
|
76
|
+
assert_equal @data['custom'], 'foo'
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
class Custom::RegistrationsControllerTest < ActionDispatch::IntegrationTest
|
|
6
|
+
describe Custom::RegistrationsController do
|
|
7
|
+
include CustomControllersRoutes
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
@create_params = attributes_for(:user,
|
|
11
|
+
confirm_success_url: Faker::Internet.url,
|
|
12
|
+
unpermitted_param: '(x_x)')
|
|
13
|
+
|
|
14
|
+
@existing_user = create(:user, :confirmed)
|
|
15
|
+
@auth_headers = @existing_user.create_new_auth_token
|
|
16
|
+
@client_id = @auth_headers['client']
|
|
17
|
+
|
|
18
|
+
# ensure request is not treated as batch request
|
|
19
|
+
age_token(@existing_user, @client_id)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
test 'yield resource to block on create success' do
|
|
23
|
+
post '/nice_user_auth', params: @create_params
|
|
24
|
+
assert @controller.create_block_called?,
|
|
25
|
+
'create failed to yield resource to provided block'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
test 'yield resource to block on create success with custom json' do
|
|
29
|
+
post '/nice_user_auth', params: @create_params
|
|
30
|
+
|
|
31
|
+
@data = JSON.parse(response.body)
|
|
32
|
+
|
|
33
|
+
assert @controller.create_block_called?,
|
|
34
|
+
'create failed to yield resource to provided block'
|
|
35
|
+
assert_equal @data['custom'], 'foo'
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
test 'yield resource to block on update success' do
|
|
39
|
+
put '/nice_user_auth',
|
|
40
|
+
params: {
|
|
41
|
+
nickname: "Ol' Sunshine-face"
|
|
42
|
+
},
|
|
43
|
+
headers: @auth_headers
|
|
44
|
+
assert @controller.update_block_called?,
|
|
45
|
+
'update failed to yield resource to provided block'
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
test 'yield resource to block on destroy success' do
|
|
49
|
+
delete '/nice_user_auth', headers: @auth_headers
|
|
50
|
+
assert @controller.destroy_block_called?,
|
|
51
|
+
'destroy failed to yield resource to provided block'
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe 'when overriding #build_resource' do
|
|
55
|
+
test 'it fails' do
|
|
56
|
+
Custom::RegistrationsController.any_instance.stubs(:build_resource).returns(nil)
|
|
57
|
+
assert_raises DeviseTokenAuth::Errors::NoResourceDefinedError do
|
|
58
|
+
post '/nice_user_auth', params: @create_params
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
class Custom::SessionsControllerTest < ActionController::TestCase
|
|
6
|
+
describe Custom::SessionsController do
|
|
7
|
+
include CustomControllersRoutes
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
@existing_user = create(:user, :confirmed)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
test 'yield resource to block on create success' do
|
|
14
|
+
post :create,
|
|
15
|
+
params: {
|
|
16
|
+
email: @existing_user.email,
|
|
17
|
+
password: @existing_user.password
|
|
18
|
+
}
|
|
19
|
+
assert @controller.create_block_called?,
|
|
20
|
+
'create failed to yield resource to provided block'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
test 'yield resource to block on destroy success' do
|
|
24
|
+
@auth_headers = @existing_user.create_new_auth_token
|
|
25
|
+
request.headers.merge!(@auth_headers)
|
|
26
|
+
delete :destroy, format: :json
|
|
27
|
+
assert @controller.destroy_block_called?,
|
|
28
|
+
'destroy failed to yield resource to provided block'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
test 'render method override' do
|
|
32
|
+
post :create,
|
|
33
|
+
params: { email: @existing_user.email,
|
|
34
|
+
password: @existing_user.password }
|
|
35
|
+
@data = JSON.parse(response.body)
|
|
36
|
+
assert_equal @data['custom'], 'foo'
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
class Custom::TokenValidationsControllerTest < ActionDispatch::IntegrationTest
|
|
6
|
+
describe Custom::TokenValidationsController do
|
|
7
|
+
include CustomControllersRoutes
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
@resource = create(:user, :confirmed)
|
|
11
|
+
|
|
12
|
+
@auth_headers = @resource.create_new_auth_token
|
|
13
|
+
|
|
14
|
+
@token = @auth_headers['access-token']
|
|
15
|
+
@client_id = @auth_headers['client']
|
|
16
|
+
@expiry = @auth_headers['expiry']
|
|
17
|
+
|
|
18
|
+
# ensure that request is not treated as batch request
|
|
19
|
+
age_token(@resource, @client_id)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
test 'yield resource to block on validate_token success' do
|
|
23
|
+
get '/nice_user_auth/validate_token',
|
|
24
|
+
params: {},
|
|
25
|
+
headers: @auth_headers
|
|
26
|
+
assert @controller.validate_token_block_called?,
|
|
27
|
+
'validate_token failed to yield resource to provided block'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
test 'yield resource to block on validate_token success with custom json' do
|
|
31
|
+
get '/nice_user_auth/validate_token',
|
|
32
|
+
params: {},
|
|
33
|
+
headers: @auth_headers
|
|
34
|
+
|
|
35
|
+
@data = JSON.parse(response.body)
|
|
36
|
+
|
|
37
|
+
assert @controller.validate_token_block_called?,
|
|
38
|
+
'validate_token failed to yield resource to provided block'
|
|
39
|
+
assert_equal @data['custom'], 'foo'
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
# was the web request successful?
|
|
6
|
+
# was the user redirected to the right page?
|
|
7
|
+
# was the user successfully authenticated?
|
|
8
|
+
# was the correct object stored in the response?
|
|
9
|
+
# was the appropriate message delivered in the json payload?
|
|
10
|
+
|
|
11
|
+
class DemoGroupControllerTest < ActionDispatch::IntegrationTest
|
|
12
|
+
describe DemoGroupController do
|
|
13
|
+
describe 'Token access' do
|
|
14
|
+
before do
|
|
15
|
+
# user
|
|
16
|
+
@resource = create(:user, :confirmed)
|
|
17
|
+
|
|
18
|
+
@resource_auth_headers = @resource.create_new_auth_token
|
|
19
|
+
|
|
20
|
+
@resource_token = @resource_auth_headers['access-token']
|
|
21
|
+
@resource_client_id = @resource_auth_headers['client']
|
|
22
|
+
@resource_expiry = @resource_auth_headers['expiry']
|
|
23
|
+
|
|
24
|
+
# mang
|
|
25
|
+
@mang = create(:mang_user, :confirmed)
|
|
26
|
+
|
|
27
|
+
@mang_auth_headers = @mang.create_new_auth_token
|
|
28
|
+
|
|
29
|
+
@mang_token = @mang_auth_headers['access-token']
|
|
30
|
+
@mang_client_id = @mang_auth_headers['client']
|
|
31
|
+
@mang_expiry = @mang_auth_headers['expiry']
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe 'user access' do
|
|
35
|
+
before do
|
|
36
|
+
# ensure that request is not treated as batch request
|
|
37
|
+
age_token(@resource, @resource_client_id)
|
|
38
|
+
|
|
39
|
+
get '/demo/members_only_group',
|
|
40
|
+
params: {},
|
|
41
|
+
headers: @resource_auth_headers
|
|
42
|
+
|
|
43
|
+
@resp_token = response.headers['access-token']
|
|
44
|
+
@resp_client_id = response.headers['client']
|
|
45
|
+
@resp_expiry = response.headers['expiry']
|
|
46
|
+
@resp_uid = response.headers['uid']
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
test 'request is successful' do
|
|
50
|
+
assert_equal 200, response.status
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
describe 'devise mappings' do
|
|
54
|
+
it 'should define current_user' do
|
|
55
|
+
assert_equal @resource, @controller.current_user
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'should define user_signed_in?' do
|
|
59
|
+
assert @controller.user_signed_in?
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it 'should not define current_mang' do
|
|
63
|
+
refute_equal @resource, @controller.current_mang
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it 'should define current_member' do
|
|
67
|
+
assert_equal @resource, @controller.current_member
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it 'should define current_members' do
|
|
71
|
+
assert @controller.current_members.include? @resource
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'should define member_signed_in?' do
|
|
75
|
+
assert @controller.current_members.include? @resource
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it 'should define render_authenticate_error' do
|
|
79
|
+
assert @controller.methods.include?(:render_authenticate_error)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
describe 'mang access' do
|
|
85
|
+
before do
|
|
86
|
+
# ensure that request is not treated as batch request
|
|
87
|
+
age_token(@mang, @mang_client_id)
|
|
88
|
+
|
|
89
|
+
get '/demo/members_only_group',
|
|
90
|
+
params: {},
|
|
91
|
+
headers: @mang_auth_headers
|
|
92
|
+
|
|
93
|
+
@resp_token = response.headers['access-token']
|
|
94
|
+
@resp_client_id = response.headers['client']
|
|
95
|
+
@resp_expiry = response.headers['expiry']
|
|
96
|
+
@resp_uid = response.headers['uid']
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
test 'request is successful' do
|
|
100
|
+
assert_equal 200, response.status
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
describe 'devise mappings' do
|
|
104
|
+
it 'should define current_mang' do
|
|
105
|
+
assert_equal @mang, @controller.current_mang
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it 'should define mang_signed_in?' do
|
|
109
|
+
assert @controller.mang_signed_in?
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it 'should not define current_mang' do
|
|
113
|
+
refute_equal @mang, @controller.current_user
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it 'should define current_member' do
|
|
117
|
+
assert_equal @mang, @controller.current_member
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it 'should define current_members' do
|
|
121
|
+
assert @controller.current_members.include? @mang
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it 'should define member_signed_in?' do
|
|
125
|
+
assert @controller.current_members.include? @mang
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it 'should define render_authenticate_error' do
|
|
129
|
+
assert @controller.methods.include?(:render_authenticate_error)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
describe 'failed access' do
|
|
135
|
+
before do
|
|
136
|
+
get '/demo/members_only_group',
|
|
137
|
+
params: {},
|
|
138
|
+
headers: @mang_auth_headers.merge('access-token' => 'bogus')
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it 'should not return any auth headers' do
|
|
142
|
+
refute response.headers['access-token']
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it 'should return error: unauthorized status' do
|
|
146
|
+
assert_equal 401, response.status
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|