devise_token_auth 1.0.0 → 1.1.4

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.
Files changed (114) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +4 -2
  3. data/app/controllers/devise_token_auth/application_controller.rb +2 -3
  4. data/app/controllers/devise_token_auth/concerns/resource_finder.rb +11 -12
  5. data/app/controllers/devise_token_auth/concerns/set_user_by_token.rb +39 -55
  6. data/app/controllers/devise_token_auth/confirmations_controller.rb +63 -20
  7. data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +77 -29
  8. data/app/controllers/devise_token_auth/passwords_controller.rb +44 -30
  9. data/app/controllers/devise_token_auth/registrations_controller.rb +33 -40
  10. data/app/controllers/devise_token_auth/sessions_controller.rb +5 -5
  11. data/app/controllers/devise_token_auth/unlocks_controller.rb +4 -4
  12. data/app/models/devise_token_auth/concerns/active_record_support.rb +16 -0
  13. data/app/models/devise_token_auth/concerns/confirmable_support.rb +27 -0
  14. data/app/models/devise_token_auth/concerns/mongoid_support.rb +19 -0
  15. data/app/models/devise_token_auth/concerns/tokens_serialization.rb +19 -0
  16. data/app/models/devise_token_auth/concerns/user.rb +52 -71
  17. data/app/models/devise_token_auth/concerns/user_omniauth_callbacks.rb +3 -3
  18. data/app/validators/{email_validator.rb → devise_token_auth_email_validator.rb} +1 -1
  19. data/config/locales/da-DK.yml +2 -0
  20. data/config/locales/de.yml +2 -0
  21. data/config/locales/en.yml +7 -0
  22. data/config/locales/es.yml +2 -0
  23. data/config/locales/fr.yml +2 -0
  24. data/config/locales/he.yml +52 -0
  25. data/config/locales/it.yml +2 -0
  26. data/config/locales/ja.yml +4 -2
  27. data/config/locales/ko.yml +51 -0
  28. data/config/locales/nl.yml +2 -0
  29. data/config/locales/pl.yml +6 -3
  30. data/config/locales/pt-BR.yml +2 -0
  31. data/config/locales/pt.yml +6 -3
  32. data/config/locales/ro.yml +2 -0
  33. data/config/locales/ru.yml +2 -0
  34. data/config/locales/sq.yml +2 -0
  35. data/config/locales/sv.yml +2 -0
  36. data/config/locales/uk.yml +2 -0
  37. data/config/locales/vi.yml +2 -0
  38. data/config/locales/zh-CN.yml +2 -0
  39. data/config/locales/zh-HK.yml +2 -0
  40. data/config/locales/zh-TW.yml +2 -0
  41. data/lib/devise_token_auth.rb +6 -3
  42. data/lib/devise_token_auth/blacklist.rb +2 -0
  43. data/lib/devise_token_auth/engine.rb +7 -1
  44. data/lib/devise_token_auth/rails/routes.rb +1 -1
  45. data/lib/devise_token_auth/token_factory.rb +126 -0
  46. data/lib/devise_token_auth/url.rb +3 -0
  47. data/lib/devise_token_auth/version.rb +1 -1
  48. data/lib/generators/devise_token_auth/USAGE +1 -1
  49. data/lib/generators/devise_token_auth/install_generator.rb +6 -90
  50. data/lib/generators/devise_token_auth/install_generator_helpers.rb +98 -0
  51. data/lib/generators/devise_token_auth/install_mongoid_generator.rb +46 -0
  52. data/lib/generators/devise_token_auth/templates/devise_token_auth.rb +10 -0
  53. data/lib/generators/devise_token_auth/templates/devise_token_auth_create_users.rb.erb +0 -7
  54. data/lib/generators/devise_token_auth/templates/user.rb.erb +2 -2
  55. data/lib/generators/devise_token_auth/templates/user_mongoid.rb.erb +56 -0
  56. data/test/controllers/custom/custom_confirmations_controller_test.rb +1 -1
  57. data/test/controllers/demo_user_controller_test.rb +2 -2
  58. data/test/controllers/devise_token_auth/confirmations_controller_test.rb +83 -19
  59. data/test/controllers/devise_token_auth/omniauth_callbacks_controller_test.rb +109 -42
  60. data/test/controllers/devise_token_auth/passwords_controller_test.rb +227 -102
  61. data/test/controllers/devise_token_auth/registrations_controller_test.rb +34 -7
  62. data/test/controllers/devise_token_auth/sessions_controller_test.rb +0 -38
  63. data/test/controllers/devise_token_auth/token_validations_controller_test.rb +2 -1
  64. data/test/dummy/app/active_record/confirmable_user.rb +11 -0
  65. data/test/dummy/app/{models → active_record}/lockable_user.rb +0 -0
  66. data/test/dummy/app/{models → active_record}/mang.rb +0 -0
  67. data/test/dummy/app/{models → active_record}/only_email_user.rb +0 -0
  68. data/test/dummy/app/{models → active_record}/scoped_user.rb +2 -2
  69. data/test/dummy/app/{models → active_record}/unconfirmable_user.rb +1 -2
  70. data/test/dummy/app/{models → active_record}/unregisterable_user.rb +3 -3
  71. data/test/dummy/app/active_record/user.rb +6 -0
  72. data/test/dummy/app/controllers/overrides/confirmations_controller.rb +3 -3
  73. data/test/dummy/app/controllers/overrides/passwords_controller.rb +3 -3
  74. data/test/dummy/app/controllers/overrides/registrations_controller.rb +1 -1
  75. data/test/dummy/app/controllers/overrides/sessions_controller.rb +2 -2
  76. data/test/dummy/app/models/{user.rb → concerns/favorite_color.rb} +7 -8
  77. data/test/dummy/app/mongoid/confirmable_user.rb +52 -0
  78. data/test/dummy/app/mongoid/lockable_user.rb +38 -0
  79. data/test/dummy/app/mongoid/mang.rb +46 -0
  80. data/test/dummy/app/mongoid/only_email_user.rb +33 -0
  81. data/test/dummy/app/mongoid/scoped_user.rb +50 -0
  82. data/test/dummy/app/mongoid/unconfirmable_user.rb +44 -0
  83. data/test/dummy/app/mongoid/unregisterable_user.rb +47 -0
  84. data/test/dummy/app/mongoid/user.rb +49 -0
  85. data/test/dummy/config/application.rb +23 -1
  86. data/test/dummy/config/boot.rb +4 -0
  87. data/test/dummy/config/initializers/devise.rb +285 -0
  88. data/test/dummy/config/initializers/devise_token_auth.rb +35 -4
  89. data/test/dummy/config/initializers/figaro.rb +1 -1
  90. data/test/dummy/config/initializers/omniauth.rb +1 -0
  91. data/test/dummy/config/routes.rb +2 -0
  92. data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +0 -7
  93. data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +0 -7
  94. data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +0 -7
  95. data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +0 -7
  96. data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +0 -7
  97. data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +0 -7
  98. data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +0 -7
  99. data/test/dummy/db/migrate/20190924101113_devise_token_auth_create_confirmable_users.rb +49 -0
  100. data/test/dummy/db/schema.rb +26 -28
  101. data/test/factories/users.rb +3 -2
  102. data/test/lib/devise_token_auth/blacklist_test.rb +11 -0
  103. data/test/lib/devise_token_auth/token_factory_test.rb +191 -0
  104. data/test/lib/devise_token_auth/url_test.rb +2 -2
  105. data/test/lib/generators/devise_token_auth/install_generator_test.rb +51 -31
  106. data/test/lib/generators/devise_token_auth/install_generator_with_namespace_test.rb +51 -31
  107. data/test/models/concerns/mongoid_support_test.rb +31 -0
  108. data/test/models/concerns/tokens_serialization_test.rb +70 -0
  109. data/test/models/confirmable_user_test.rb +35 -0
  110. data/test/models/only_email_user_test.rb +0 -8
  111. data/test/models/user_test.rb +1 -33
  112. data/test/test_helper.rb +13 -3
  113. metadata +129 -26
  114. data/config/initializers/devise.rb +0 -198
@@ -5,20 +5,51 @@ DeviseTokenAuth.setup do |config|
5
5
  # client is responsible for keeping track of the changing tokens. Change
6
6
  # this to false to prevent the Authorization header from changing after
7
7
  # each request.
8
- #config.change_headers_on_each_request = true
8
+ # config.change_headers_on_each_request = true
9
9
 
10
10
  # By default, users will need to re-authenticate after 2 weeks. This setting
11
11
  # determines how long tokens will remain valid after they are issued.
12
- #config.token_lifespan = 2.weeks
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
13
22
 
14
23
  # Sometimes it's necessary to make several requests to the API at the same
15
24
  # time. In this case, each request in the batch will need to share the same
16
25
  # auth token. This setting determines how far apart the requests can be while
17
26
  # still using the same auth token.
18
- #config.batch_request_buffer_throttle = 5.seconds
27
+ # config.batch_request_buffer_throttle = 5.seconds
19
28
 
20
29
  # This route will be the prefix for all oauth2 redirect callbacks. For
21
30
  # example, using the default '/omniauth', the github oauth2 provider will
22
31
  # redirect successful authentications to '/omniauth/github/callback'
23
- #config.omniauth_prefix = "/omniauth"
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 = {:'access-token' => 'access-token',
46
+ # :'client' => 'client',
47
+ # :'expiry' => 'expiry',
48
+ # :'uid' => 'uid',
49
+ # :'token-type' => 'token-type' }
50
+
51
+ # By default, only Bearer Token authentication is implemented out of the box.
52
+ # If, however, you wish to integrate with legacy Devise authentication, you can
53
+ # do so by enabling this flag. NOTE: This feature is highly experimental!
54
+ # config.enable_standard_devise_support = false
24
55
  end
@@ -1,3 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- #Figaro.require("GITHUB_KEY", "GITHUB_SECRET", "FACEBOOK_KEY", "FACEBOOK_SECRET", "GOOGLE_KEY", "GOOGLE_SECRET")
3
+ #Figaro.require("GITHUB_KEY", "GITHUB_SECRET", "FACEBOOK_KEY", "FACEBOOK_SECRET", "GOOGLE_KEY", "GOOGLE_SECRET", "APPLE_CLIENT_ID", "APPLE_TEAM_ID", "APPLE_KEY", "APPLE_PEM")
@@ -4,6 +4,7 @@ Rails.application.config.middleware.use OmniAuth::Builder do |b|
4
4
  provider :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET'], scope: 'email,profile'
5
5
  provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET']
6
6
  provider :google_oauth2, ENV['GOOGLE_KEY'], ENV['GOOGLE_SECRET']
7
+ provider :apple, ENV['APPLE_CLIENT_ID'], '', { scope: 'email name', team_id: ENV['APPLE_TEAM_ID'], key_id: ENV['APPLE_KEY'], pem: ENV['APPLE_PEM'] }
7
8
  provider :developer,
8
9
  fields: [:first_name, :last_name],
9
10
  uid_field: :last_name
@@ -20,6 +20,8 @@ Rails.application.routes.draw do
20
20
 
21
21
  mount_devise_token_auth_for 'LockableUser', at: 'lockable_user_auth'
22
22
 
23
+ mount_devise_token_auth_for 'ConfirmableUser', at: 'confirmable_user_auth'
24
+
23
25
  # test namespacing
24
26
  namespace :api do
25
27
  scope :v1 do
@@ -18,13 +18,6 @@ class DeviseTokenAuthCreateUsers < ActiveRecord::Migration[4.2]
18
18
  ## Rememberable
19
19
  t.datetime :remember_created_at
20
20
 
21
- ## Trackable
22
- t.integer :sign_in_count, default: 0, null: false
23
- t.datetime :current_sign_in_at
24
- t.datetime :last_sign_in_at
25
- t.string :current_sign_in_ip
26
- t.string :last_sign_in_ip
27
-
28
21
  ## Confirmable
29
22
  t.string :confirmation_token
30
23
  t.datetime :confirmed_at
@@ -18,13 +18,6 @@ class DeviseTokenAuthCreateMangs < ActiveRecord::Migration[4.2]
18
18
  ## Rememberable
19
19
  t.datetime :remember_created_at
20
20
 
21
- ## Trackable
22
- t.integer :sign_in_count, default: 0, null: false
23
- t.datetime :current_sign_in_at
24
- t.datetime :last_sign_in_at
25
- t.string :current_sign_in_ip
26
- t.string :last_sign_in_ip
27
-
28
21
  ## Confirmable
29
22
  t.string :confirmation_token
30
23
  t.datetime :confirmed_at
@@ -19,13 +19,6 @@ class DeviseTokenAuthCreateOnlyEmailUsers < ActiveRecord::Migration[4.2]
19
19
  ## Rememberable
20
20
  #t.datetime :remember_created_at
21
21
 
22
- ## Trackable
23
- #t.integer :sign_in_count, :default => 0, :null => false
24
- #t.datetime :current_sign_in_at
25
- #t.datetime :last_sign_in_at
26
- #t.string :current_sign_in_ip
27
- #t.string :last_sign_in_ip
28
-
29
22
  ## Confirmable
30
23
  #t.string :confirmation_token
31
24
  #t.datetime :confirmed_at
@@ -20,13 +20,6 @@ class DeviseTokenAuthCreateUnregisterableUsers < ActiveRecord::Migration[4.2]
20
20
  ## Rememberable
21
21
  t.datetime :remember_created_at
22
22
 
23
- ## Trackable
24
- t.integer :sign_in_count, default: 0, null: false
25
- t.datetime :current_sign_in_at
26
- t.datetime :last_sign_in_at
27
- t.string :current_sign_in_ip
28
- t.string :last_sign_in_ip
29
-
30
23
  ## Confirmable
31
24
  t.string :confirmation_token
32
25
  t.datetime :confirmed_at
@@ -20,13 +20,6 @@ class DeviseTokenAuthCreateUnconfirmableUsers < ActiveRecord::Migration[4.2]
20
20
  ## Rememberable
21
21
  t.datetime :remember_created_at
22
22
 
23
- ## Trackable
24
- t.integer :sign_in_count, default: 0, null: false
25
- t.datetime :current_sign_in_at
26
- t.datetime :last_sign_in_at
27
- t.string :current_sign_in_ip
28
- t.string :last_sign_in_ip
29
-
30
23
  ## Confirmable
31
24
  # t.string :confirmation_token
32
25
  # t.datetime :confirmed_at
@@ -20,13 +20,6 @@ class DeviseTokenAuthCreateScopedUsers < ActiveRecord::Migration[4.2]
20
20
  ## Rememberable
21
21
  t.datetime :remember_created_at
22
22
 
23
- ## Trackable
24
- t.integer :sign_in_count, default: 0, null: false
25
- t.datetime :current_sign_in_at
26
- t.datetime :last_sign_in_at
27
- t.string :current_sign_in_ip
28
- t.string :last_sign_in_ip
29
-
30
23
  ## Confirmable
31
24
  t.string :confirmation_token
32
25
  t.datetime :confirmed_at
@@ -20,13 +20,6 @@ class DeviseTokenAuthCreateLockableUsers < ActiveRecord::Migration[4.2]
20
20
  ## Rememberable
21
21
  # t.datetime :remember_created_at
22
22
 
23
- ## Trackable
24
- # t.integer :sign_in_count, :default => 0, :null => false
25
- # t.datetime :current_sign_in_at
26
- # t.datetime :last_sign_in_at
27
- # t.string :current_sign_in_ip
28
- # t.string :last_sign_in_ip
29
-
30
23
  ## Confirmable
31
24
  # t.string :confirmation_token
32
25
  # t.datetime :confirmed_at
@@ -0,0 +1,49 @@
1
+ class DeviseTokenAuthCreateConfirmableUsers < ActiveRecord::Migration[5.2]
2
+ def change
3
+
4
+ create_table(:confirmable_users) 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
+ t.text :tokens
39
+
40
+ t.timestamps
41
+ end
42
+
43
+ add_index :confirmable_users, :email, unique: true
44
+ add_index :confirmable_users, [:uid, :provider], unique: true
45
+ add_index :confirmable_users, :reset_password_token, unique: true
46
+ add_index :confirmable_users, :confirmation_token, unique: true
47
+ # add_index :confirmable_users, :unlock_token, unique: true
48
+ end
49
+ end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  # This file is auto-generated from the current state of the database. Instead
4
2
  # of editing this file, please use the migrations feature of Active Record to
5
3
  # incrementally modify your database, and then regenerate this schema definition.
@@ -12,7 +10,32 @@
12
10
  #
13
11
  # It's strongly recommended that you check this file into your version control system.
14
12
 
15
- ActiveRecord::Schema.define(version: 20160629184441) do
13
+ ActiveRecord::Schema.define(version: 2019_09_24_101113) do
14
+
15
+ create_table "confirmable_users", force: :cascade do |t|
16
+ t.string "provider", default: "email", null: false
17
+ t.string "uid", default: "", null: false
18
+ t.string "encrypted_password", default: "", null: false
19
+ t.string "reset_password_token"
20
+ t.datetime "reset_password_sent_at"
21
+ t.boolean "allow_password_change", default: false
22
+ t.datetime "remember_created_at"
23
+ t.string "confirmation_token"
24
+ t.datetime "confirmed_at"
25
+ t.datetime "confirmation_sent_at"
26
+ t.string "unconfirmed_email"
27
+ t.string "name"
28
+ t.string "nickname"
29
+ t.string "image"
30
+ t.string "email"
31
+ t.text "tokens"
32
+ t.datetime "created_at", null: false
33
+ t.datetime "updated_at", null: false
34
+ t.index ["confirmation_token"], name: "index_confirmable_users_on_confirmation_token", unique: true
35
+ t.index ["email"], name: "index_confirmable_users_on_email", unique: true
36
+ t.index ["reset_password_token"], name: "index_confirmable_users_on_reset_password_token", unique: true
37
+ t.index ["uid", "provider"], name: "index_confirmable_users_on_uid_and_provider", unique: true
38
+ end
16
39
 
17
40
  create_table "lockable_users", force: :cascade do |t|
18
41
  t.string "provider", null: false
@@ -41,11 +64,6 @@ ActiveRecord::Schema.define(version: 20160629184441) do
41
64
  t.string "reset_password_redirect_url"
42
65
  t.boolean "allow_password_change", default: false
43
66
  t.datetime "remember_created_at"
44
- t.integer "sign_in_count", default: 0, null: false
45
- t.datetime "current_sign_in_at"
46
- t.datetime "last_sign_in_at"
47
- t.string "current_sign_in_ip"
48
- t.string "last_sign_in_ip"
49
67
  t.string "confirmation_token"
50
68
  t.datetime "confirmed_at"
51
69
  t.datetime "confirmation_sent_at"
@@ -88,11 +106,6 @@ ActiveRecord::Schema.define(version: 20160629184441) do
88
106
  t.datetime "reset_password_sent_at"
89
107
  t.boolean "allow_password_change", default: false
90
108
  t.datetime "remember_created_at"
91
- t.integer "sign_in_count", default: 0, null: false
92
- t.datetime "current_sign_in_at"
93
- t.datetime "last_sign_in_at"
94
- t.string "current_sign_in_ip"
95
- t.string "last_sign_in_ip"
96
109
  t.string "confirmation_token"
97
110
  t.datetime "confirmed_at"
98
111
  t.datetime "confirmation_sent_at"
@@ -117,11 +130,6 @@ ActiveRecord::Schema.define(version: 20160629184441) do
117
130
  t.datetime "reset_password_sent_at"
118
131
  t.boolean "allow_password_change", default: false
119
132
  t.datetime "remember_created_at"
120
- t.integer "sign_in_count", default: 0, null: false
121
- t.datetime "current_sign_in_at"
122
- t.datetime "last_sign_in_at"
123
- t.string "current_sign_in_ip"
124
- t.string "last_sign_in_ip"
125
133
  t.string "name"
126
134
  t.string "nickname"
127
135
  t.string "image"
@@ -142,11 +150,6 @@ ActiveRecord::Schema.define(version: 20160629184441) do
142
150
  t.datetime "reset_password_sent_at"
143
151
  t.boolean "allow_password_change", default: false
144
152
  t.datetime "remember_created_at"
145
- t.integer "sign_in_count", default: 0, null: false
146
- t.datetime "current_sign_in_at"
147
- t.datetime "last_sign_in_at"
148
- t.string "current_sign_in_ip"
149
- t.string "last_sign_in_ip"
150
153
  t.string "confirmation_token"
151
154
  t.datetime "confirmed_at"
152
155
  t.datetime "confirmation_sent_at"
@@ -171,11 +174,6 @@ ActiveRecord::Schema.define(version: 20160629184441) do
171
174
  t.string "reset_password_redirect_url"
172
175
  t.boolean "allow_password_change", default: false
173
176
  t.datetime "remember_created_at"
174
- t.integer "sign_in_count", default: 0, null: false
175
- t.datetime "current_sign_in_at"
176
- t.datetime "last_sign_in_at"
177
- t.string "current_sign_in_ip"
178
- t.string "last_sign_in_ip"
179
177
  t.string "confirmation_token"
180
178
  t.datetime "confirmed_at"
181
179
  t.datetime "confirmation_sent_at"
@@ -1,6 +1,6 @@
1
1
  FactoryBot.define do
2
2
  factory :user do
3
- email { Faker::Internet.safe_email }
3
+ email { Faker::Internet.unique.safe_email }
4
4
  password { Faker::Internet.password }
5
5
  provider { 'email' }
6
6
 
@@ -24,7 +24,7 @@ FactoryBot.define do
24
24
  end
25
25
 
26
26
  trait :facebook do
27
- uid { Faker::Number.number(10) }
27
+ uid { Faker::Number.number }
28
28
  provider { 'facebook' }
29
29
  end
30
30
 
@@ -36,5 +36,6 @@ FactoryBot.define do
36
36
  factory :mang_user, class: 'Mang'
37
37
  factory :only_email_user, class: 'OnlyEmailUser'
38
38
  factory :scoped_user, class: 'ScopedUser'
39
+ factory :confirmable_user, class: 'ConfirmableUser'
39
40
  end
40
41
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class DeviseTokenAuth::BlacklistTest < ActiveSupport::TestCase
6
+ describe Devise::Models::Authenticatable::BLACKLIST_FOR_SERIALIZATION do
7
+ test 'should include :tokens' do
8
+ assert Devise::Models::Authenticatable::BLACKLIST_FOR_SERIALIZATION.include?(:tokens)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,191 @@
1
+ require 'test_helper'
2
+
3
+ class DeviseTokenAuth::TokenFactoryTest < ActiveSupport::TestCase
4
+ describe 'TokenFactory module' do
5
+ let(:tf) { DeviseTokenAuth::TokenFactory }
6
+ let(:token_regexp) { /^[-_A-Za-z0-9]{22}$/ }
7
+
8
+ it 'should be defined' do
9
+ assert_equal(tf.present?, true)
10
+ assert_kind_of(Module, tf)
11
+ end
12
+
13
+ describe 'interface' do
14
+ let(:token_hash_cost_regexp) { /\$[\w]+\$([\d]+)\$/ }
15
+ let(:lifespan) { 10 }
16
+ let(:cost) { DeviseTokenAuth.token_cost }
17
+
18
+ it '::secure_string' do
19
+ assert_respond_to(tf, :secure_string)
20
+
21
+ secure_string = tf.secure_string
22
+ assert_equal(secure_string.size, 22)
23
+ assert_match(token_regexp, secure_string)
24
+
25
+ SecureRandom.stub(:urlsafe_base64, secure_string) do
26
+ assert_equal(tf.secure_string, secure_string)
27
+ end
28
+ end
29
+
30
+ it '::client' do
31
+ assert_respond_to(tf, :client)
32
+
33
+ client = tf.client
34
+ assert_equal(client.size, 22)
35
+ assert_match(token_regexp, client)
36
+
37
+ secure_string = tf.secure_string
38
+ tf.stub(:secure_string, secure_string) do
39
+ assert_equal(tf.client, secure_string)
40
+ end
41
+ end
42
+
43
+ it '::token' do
44
+ assert_respond_to(tf, :token)
45
+
46
+ token = tf.token
47
+ assert_kind_of(String, token)
48
+ assert_equal(token.size, 22)
49
+ assert_match(token_regexp, token)
50
+
51
+ secure_string = tf.secure_string
52
+ tf.stub(:secure_string, secure_string) do
53
+ assert_equal(tf.token, secure_string)
54
+ end
55
+ end
56
+
57
+ it '::token_hash(args)' do
58
+ assert_respond_to(tf, :token_hash)
59
+
60
+ token_hash = tf.token_hash(tf.token)
61
+ assert_equal(token_hash.size, 60)
62
+ assert_kind_of(String, token_hash)
63
+
64
+ token_cost = token_hash_cost_regexp.match(token_hash)[1].to_i
65
+ assert_equal(token_cost, cost)
66
+
67
+ cost = DeviseTokenAuth.token_cost == 4 ? 10 : 4
68
+ token_hash = tf.token_hash(tf.token, cost)
69
+ token_cost = token_hash_cost_regexp.match(token_hash)[1].to_i
70
+ assert_equal(token_cost, cost)
71
+
72
+ cost = nil
73
+ token_hash = tf.token_hash(tf.token, cost)
74
+ token_cost = token_hash_cost_regexp.match(token_hash)[1].to_i
75
+ assert_equal(token_cost, DeviseTokenAuth.token_cost)
76
+ end
77
+
78
+ it '::expiry' do
79
+ assert_respond_to(tf, :expiry)
80
+
81
+ assert_kind_of(Integer, tf.expiry)
82
+ assert tf.expiry > Time.now.to_i
83
+ end
84
+
85
+ it '::expiry(args)' do
86
+ time = Time.now
87
+ Time.stub(:now, time) do
88
+ assert_equal(tf.expiry(lifespan), (time + lifespan).to_i)
89
+
90
+ lifespan = nil
91
+ assert_equal(tf.expiry(lifespan), (time + DeviseTokenAuth.token_lifespan).to_i)
92
+ end
93
+ end
94
+
95
+ it '::create' do
96
+ assert_respond_to(tf, :create)
97
+
98
+ token = tf.create
99
+ assert token
100
+ token.members.each { |m| refute_nil token[m] }
101
+ end
102
+
103
+ it '::create(args)' do
104
+ client = tf.client
105
+ token = tf.create(client: client)
106
+ assert_equal(token.client, client)
107
+
108
+ time = Time.now
109
+ Time.stub(:now, time) do
110
+ token = tf.create(lifespan: lifespan)
111
+ assert_equal(token.expiry, (time + lifespan).to_i)
112
+ end
113
+
114
+ token = tf.create(cost: cost)
115
+ token_cost = token_hash_cost_regexp.match(token.token_hash)[1].to_i
116
+ assert_equal(token_cost, cost)
117
+ end
118
+
119
+ it '::new' do
120
+ assert_respond_to(tf, :new)
121
+
122
+ token = tf.new
123
+ token.each { |v| assert_nil v }
124
+ end
125
+
126
+ it '::valid_token_hash?' do
127
+ assert_respond_to(tf, :valid_token_hash?)
128
+
129
+ refute tf.valid_token_hash?('koskoskos')
130
+ assert tf.valid_token_hash?(tf.create.token_hash)
131
+ end
132
+
133
+ it '::token_hash_is_token?' do
134
+ assert_respond_to(tf, :token_hash_is_token?)
135
+
136
+ token = tf.create
137
+ refute tf.token_hash_is_token?(token.token_hash, 'koskoskos')
138
+ refute tf.token_hash_is_token?('koskoskos', token.token)
139
+ assert tf.token_hash_is_token?(token.token_hash, token.token)
140
+ end
141
+ end
142
+
143
+ describe 'token object implements' do
144
+ let(:object) { tf.create }
145
+
146
+ it '#client' do
147
+ assert_respond_to(object, :client)
148
+
149
+ assert_kind_of(String, object.client)
150
+ assert_equal(object.client.size, 22)
151
+ assert_match(token_regexp, object.client)
152
+ end
153
+
154
+ it '#token' do
155
+ assert_respond_to(object, :token)
156
+
157
+ assert_kind_of(String, object.token)
158
+ assert_equal(object.token.size, 22)
159
+ assert_match(token_regexp, object.token)
160
+ end
161
+
162
+ it '#token_hash' do
163
+ assert_respond_to(object, :token_hash)
164
+
165
+ assert_kind_of(String, object.token_hash)
166
+ assert_equal(object.token_hash.size, 60)
167
+ end
168
+
169
+ it '#expiry' do
170
+ assert_respond_to(object, :expiry)
171
+ assert_kind_of(Integer, object.expiry)
172
+ end
173
+
174
+ it '#clear!' do
175
+ assert_respond_to(object, :clear!)
176
+
177
+ assert object.clear!
178
+ object.each { |v| assert_nil v }
179
+ end
180
+
181
+ it '#present?' do
182
+ assert_respond_to(object, :present?)
183
+
184
+ assert object.present?
185
+
186
+ object.token = nil
187
+ refute object.present?
188
+ end
189
+ end
190
+ end
191
+ end