simple_token_authentication 1.9.1 → 1.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9f0598cbfab98dc89e4bd6a1ec862ef0c190b11e
4
- data.tar.gz: 69e2239f4d6d51c230056f61051e6f1cc05a633f
3
+ metadata.gz: b4c32afa7541d97b6932847b957f50466ee24038
4
+ data.tar.gz: 06e65364bd75dd8378af724e6d73a66c22934fdd
5
5
  SHA512:
6
- metadata.gz: c0eded2ae10fcb6bed035abb0f0c2715c7914aab698e51bf825e469dcb79e1f499088db73a30bb4ef722129a3ce80714ecf4ceac083face887df7514011d7802
7
- data.tar.gz: c6ac775ebb4f855edb1799463af719bbf885de8ca7c2f2e8cad1e76a10ffba3f23f106a1c0dfddd87ca31f479efdf9de48e382c2d61394b686bd7210007ccd1d
6
+ metadata.gz: 5e1fd325345ff24df707a2a9c7a9f008d36a41702336e20671011c2ad22565416f8dbcd4f8f75e3fca885f924dddecc52a0b0c094aa77fe66e6e8238d4f9633a
7
+ data.tar.gz: f46a13bc9a3ef51a55e4ea0d9101d90fa723f139e1a658c2a2dc85a2d71282a3346edb22ceadef0b86d24582a92e13a1e756f674edfd9d0c49bdc123eba1b5b6
data/README.md CHANGED
@@ -101,7 +101,7 @@ class ApplicationController < ActionController::Base # or ActionController::API
101
101
 
102
102
  # Security note: controllers with no-CSRF protection must disable the Devise fallback,
103
103
  # see #49 for details.
104
- # acts_as_token_authentication_handler_for User, fallback_to_devise: false
104
+ # acts_as_token_authentication_handler_for User, fallback: :none
105
105
 
106
106
  # The token authentication requirement can target specific controller actions:
107
107
  # acts_as_token_authentication_handler_for User, only: [:create, :update, :destroy]
@@ -112,12 +112,12 @@ class ApplicationController < ActionController::Base # or ActionController::API
112
112
  # acts_as_token_authentication_handler_for User, if: lambda { |controller| controller.request.format.json? }
113
113
 
114
114
  # Several token authenticatable models can be handled by the same controller.
115
- # If so, for all of them except the last, the fallback_to_devise should be disabled.
115
+ # If so, for all of them except the last, the fallback should be set to :none.
116
116
  #
117
117
  # Please do notice that the order of declaration defines the order of precedence.
118
118
  #
119
- # acts_as_token_authentication_handler_for Admin, fallback_to_devise: false
120
- # acts_as_token_authentication_handler_for SpecialUser, fallback_to_devise: false
119
+ # acts_as_token_authentication_handler_for Admin, fallback: :none
120
+ # acts_as_token_authentication_handler_for SpecialUser, fallback: :none
121
121
  # acts_as_token_authentication_handler_for User # the last fallback is up to you
122
122
 
123
123
  # Aliases can be defined for namespaced models:
@@ -236,11 +236,15 @@ X-User-Token 1G8_s7P-V-4MGojaKD7a
236
236
 
237
237
  In fact, you can mix both methods and provide the `user_email` with one and the `user_token` with the other, even if it would be a freak thing to do.
238
238
 
239
- ### Integration with other authentication methods
239
+ ### Integration with other authentication and authorization methods
240
240
 
241
- If sign-in is successful, no other authentication method will be run, but if it doesn't (the authentication params were missing, or incorrect) then Devise takes control and tries to `authenticate_user!` with its own modules. That behaviour can however be modified for any controller through the **fallback_to_devise** option.
241
+ If sign-in is successful, no other authentication method will be run, but if it doesn't (the authentication params were missing, or incorrect) then Devise takes control and tries to `authenticate_user!` with its own modules. That behaviour can however be modified for any controller through the **fallback** option (which defaults to `fallback: :devise`).
242
242
 
243
- **Important**: Please do notice that controller actions without CSRF protection **must** disable the Devise fallback for [security reasons][csrf]. Since Rails enables CSRF protection by default, this configuration requirement should only affect controllers where you have disabled it, which may be the case of API controllers.
243
+ When `fallabck: :exception` is set, then an exception is raised on token authentication failure. The resulting controller behaviour is very similar to the behaviour induced by using the Devise `authenticate_user!` callback instead of `authenticate_user`. That setting allows, for example, to prevent unauthenticated users to accede API controllers while disabling the default fallback to Devise.
244
+
245
+ **Important**: Please do notice that controller actions without CSRF protection **must** disable the Devise fallback for [security reasons][csrf] (both `fallback: :exception` and `fallback: :none` will disable the Devise fallback). Since Rails enables CSRF protection by default, this configuration requirement should only affect controllers where you have disabled it specifically, which may be the case of API controllers.
246
+
247
+ To use no fallback when token authentication fails, set `fallback: :none`.
244
248
 
245
249
  [csrf]: https://github.com/gonzalo-bulnes/simple_token_authentication/issues/49
246
250
 
@@ -6,6 +6,7 @@ module SimpleTokenAuthentication
6
6
  extend Configuration
7
7
 
8
8
  NoAdapterAvailableError = Class.new(LoadError)
9
+ InvalidOptionValue = Class.new(RuntimeError)
9
10
 
10
11
  private
11
12
 
@@ -1,5 +1,11 @@
1
1
  module SimpleTokenAuthentication
2
- class FallbackAuthenticationHandler
2
+ class DeviseFallbackHandler
3
+
4
+ # Fallback to the Devise authentication strategies.
5
+ def fallback!(controller, entity)
6
+ authenticate_entity!(controller, entity)
7
+ end
8
+
3
9
  # Devise authentication is performed through a controller
4
10
  # which includes Devise::Controllers::Helpers
5
11
  # See http://rdoc.info/github/plataformatec/devise/master/\
@@ -0,0 +1,9 @@
1
+ module SimpleTokenAuthentication
2
+ class ExceptionFallbackHandler
3
+ # Notifies the failure of authentication to Warden in the same DEvise does.
4
+ # Does result in an HTTP 401 response in a Devise context.
5
+ def fallback!(controller, entity)
6
+ throw(:warden, scope: entity.name_underscore.to_sym) if controller.send("current_#{entity.name_underscore}").nil?
7
+ end
8
+ end
9
+ end
@@ -2,7 +2,8 @@ require 'active_support/concern'
2
2
  require 'devise'
3
3
 
4
4
  require 'simple_token_authentication/entities_manager'
5
- require 'simple_token_authentication/fallback_authentication_handler'
5
+ require 'simple_token_authentication/devise_fallback_handler'
6
+ require 'simple_token_authentication/exception_fallback_handler'
6
7
  require 'simple_token_authentication/sign_in_handler'
7
8
  require 'simple_token_authentication/token_comparator'
8
9
 
@@ -14,10 +15,10 @@ module SimpleTokenAuthentication
14
15
  private_class_method :define_token_authentication_helpers_for
15
16
  private_class_method :set_token_authentication_hooks
16
17
  private_class_method :entities_manager
17
- private_class_method :fallback_authentication_handler
18
+ private_class_method :fallback_handler
18
19
 
19
20
  private :authenticate_entity_from_token!
20
- private :authenticate_entity_from_fallback!
21
+ private :fallback!
21
22
  private :token_correct?
22
23
  private :perform_sign_in!
23
24
  private :token_comparator
@@ -34,8 +35,8 @@ module SimpleTokenAuthentication
34
35
  end
35
36
  end
36
37
 
37
- def authenticate_entity_from_fallback!(entity, fallback_authentication_handler)
38
- fallback_authentication_handler.authenticate_entity!(self, entity)
38
+ def fallback!(entity, fallback_handler)
39
+ fallback_handler.fallback!(self, entity)
39
40
  end
40
41
 
41
42
  def token_correct?(record, entity, token_comparator)
@@ -95,7 +96,7 @@ module SimpleTokenAuthentication
95
96
  model_alias = options[:as] || options['as']
96
97
  entity = entities_manager.find_or_create_entity(model, model_alias)
97
98
  options = SimpleTokenAuthentication.parse_options(options)
98
- define_token_authentication_helpers_for(entity, fallback_authentication_handler)
99
+ define_token_authentication_helpers_for(entity, fallback_handler(options))
99
100
  set_token_authentication_hooks(entity, options)
100
101
  end
101
102
 
@@ -109,15 +110,19 @@ module SimpleTokenAuthentication
109
110
  end
110
111
 
111
112
  # Private: Get one (always the same) object which behaves as a fallback authentication handler
112
- def fallback_authentication_handler
113
+ def fallback_handler(options)
113
114
  if class_variable_defined?(:@@fallback_authentication_handler)
114
115
  class_variable_get(:@@fallback_authentication_handler)
115
116
  else
116
- class_variable_set(:@@fallback_authentication_handler, FallbackAuthenticationHandler.new)
117
+ if options[:fallback] == :exception
118
+ class_variable_set(:@@fallback_authentication_handler, ExceptionFallbackHandler.new)
119
+ else
120
+ class_variable_set(:@@fallback_authentication_handler, DeviseFallbackHandler.new)
121
+ end
117
122
  end
118
123
  end
119
124
 
120
- def define_token_authentication_helpers_for(entity, fallback_authentication_handler)
125
+ def define_token_authentication_helpers_for(entity, fallback_handler)
121
126
 
122
127
  method_name = "authenticate_#{entity.name_underscore}_from_token"
123
128
  method_name_bang = method_name + '!'
@@ -130,7 +135,7 @@ module SimpleTokenAuthentication
130
135
  define_method method_name_bang.to_sym do
131
136
  lambda do |_entity|
132
137
  authenticate_entity_from_token!(_entity)
133
- authenticate_entity_from_fallback!(_entity, fallback_authentication_handler)
138
+ fallback!(_entity, fallback_handler)
134
139
  end.call(entity)
135
140
  end
136
141
  end
@@ -1,3 +1,3 @@
1
1
  module SimpleTokenAuthentication
2
- VERSION = "1.9.1"
2
+ VERSION = "1.10.0"
3
3
  end
@@ -1,9 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe SimpleTokenAuthentication::FallbackAuthenticationHandler do
3
+ describe SimpleTokenAuthentication::DeviseFallbackHandler do
4
4
 
5
5
  it_behaves_like 'an authentication handler'
6
6
 
7
+ it_behaves_like 'a fallback handler'
8
+
7
9
  describe '#authenticate_entity!' do
8
10
 
9
11
  it 'delegates authentication to Devise::Controllers::Helpers through a controller', private: true do
@@ -21,4 +23,17 @@ describe SimpleTokenAuthentication::FallbackAuthenticationHandler do
21
23
  expect(response).to eq 'Devise response.'
22
24
  end
23
25
  end
26
+
27
+ describe '#fallback!' do
28
+
29
+ it 'does #authenticate_entity!', private: true do
30
+ entity = double()
31
+ allow(@entity).to receive_message_chain(:name_underscore).and_return('entity')
32
+ controller = double()
33
+
34
+ expect(subject).to receive(:authenticate_entity!).with(controller, entity)
35
+
36
+ subject.send(:fallback!, controller, entity)
37
+ end
38
+ end
24
39
  end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe SimpleTokenAuthentication::ExceptionFallbackHandler do
4
+
5
+ it_behaves_like 'a fallback handler'
6
+
7
+ describe '#fallback!' do
8
+
9
+ context 'when authentication failed' do
10
+
11
+ before(:each) do
12
+ @entity = double()
13
+ allow(@entity).to receive_message_chain(:name_underscore).and_return('entity')
14
+ @controller = double()
15
+
16
+ allow(@controller).to receive(:current_entity).and_return(nil)
17
+ end
18
+
19
+ it 'delegates exception throwing to Warden', private: true do
20
+ expect{ subject.fallback!(@controller, @entity) }.to throw_symbol(:warden, scope: :entity)
21
+ end
22
+ end
23
+
24
+ context 'when authentication was successful' do
25
+
26
+ before(:each) do
27
+ @entity = double()
28
+ allow(@entity).to receive_message_chain(:name_underscore).and_return('entity')
29
+ @controller = double()
30
+
31
+ allow(@controller).to receive(:current_entity).and_return('some entity')
32
+ end
33
+
34
+ it 'does not throw any exception', private: true do
35
+ expect{ subject.fallback!(@controller, @entity) }.not_to throw_symbol(:warden, scope: :entity)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -78,10 +78,6 @@ describe 'Any class which includes SimpleTokenAuthentication::TokenAuthenticatio
78
78
  describe '.entities_manager' do
79
79
 
80
80
  before(:each) do
81
- # The private tag is here to keep the following examples out of
82
- # the public documentation.
83
- subject.send :public_class_method, :entities_manager
84
-
85
81
  allow(SimpleTokenAuthentication::EntitiesManager).to receive(:new)
86
82
  .and_return('a EntitiesManager instance')
87
83
  end
@@ -90,65 +86,104 @@ describe 'Any class which includes SimpleTokenAuthentication::TokenAuthenticatio
90
86
 
91
87
  it 'creates a new EntitiesManager instance', private: true do
92
88
  expect(SimpleTokenAuthentication::EntitiesManager).to receive(:new)
93
- expect(subject.entities_manager).to eq 'a EntitiesManager instance'
89
+ expect(subject.send(:entities_manager)).to eq 'a EntitiesManager instance'
94
90
  end
95
91
  end
96
92
 
97
93
  context 'when a EntitiesManager instance was already created' do
98
94
 
99
95
  before(:each) do
100
- subject.entities_manager
96
+ subject.send(:entities_manager)
101
97
  # let's make any new EntitiesManager distinct from the first
102
98
  allow(SimpleTokenAuthentication::EntitiesManager).to receive(:new)
103
99
  .and_return('another EntitiesManager instance')
104
100
  end
105
101
 
106
102
  it 'returns that instance', private: true do
107
- expect(subject.entities_manager).to eq 'a EntitiesManager instance'
103
+ expect(subject.send(:entities_manager)).to eq 'a EntitiesManager instance'
108
104
  end
109
105
 
110
106
  it 'does not create a new EntitiesManager instance', private: true do
111
107
  expect(SimpleTokenAuthentication::EntitiesManager).not_to receive(:new)
112
- expect(subject.entities_manager).not_to eq 'another EntitiesManager instance'
108
+ expect(subject.send(:entities_manager)).not_to eq 'another EntitiesManager instance'
113
109
  end
114
110
  end
115
111
  end
116
112
 
117
- describe '.fallback_authentication_handler' do
113
+ describe '.fallback_handler' do
118
114
 
119
115
  before(:each) do
120
- # The private tag is here to keep the following examples out of
121
- # the public documentation.
122
- subject.send :public_class_method, :fallback_authentication_handler
123
-
124
- allow(SimpleTokenAuthentication::FallbackAuthenticationHandler).to receive(:new)
125
- .and_return('a FallbackAuthenticationHandler instance')
116
+ allow(SimpleTokenAuthentication::DeviseFallbackHandler).to receive(:new)
117
+ .and_return('a DeviseFallbackHandler instance')
118
+ allow(SimpleTokenAuthentication::ExceptionFallbackHandler).to receive(:new)
119
+ .and_return('an ExceptionFallbackHandler instance')
126
120
  end
127
121
 
128
- context 'when called for the first time' do
122
+ context 'when the Devise fallback is enabled', fallback_option: true do
123
+
124
+ before(:each) do
125
+ @options = { fallback: :devise }
126
+ end
127
+
128
+ context 'when called for the first time' do
129
129
 
130
- it 'creates a new FallbackAuthenticationHandler instance', private: true do
131
- expect(SimpleTokenAuthentication::FallbackAuthenticationHandler).to receive(:new)
132
- expect(subject.fallback_authentication_handler).to eq 'a FallbackAuthenticationHandler instance'
130
+ it 'creates a new DeviseFallbackHandler instance', private: true do
131
+ expect(SimpleTokenAuthentication::DeviseFallbackHandler).to receive(:new)
132
+ expect(subject.send(:fallback_handler, @options)).to eq 'a DeviseFallbackHandler instance'
133
+ end
134
+ end
135
+
136
+ context 'when a DeviseFallbackHandler instance was already created' do
137
+
138
+ before(:each) do
139
+ subject.send(:fallback_handler, @options)
140
+ # let's make any new DeviseFallbackHandler distinct from the first
141
+ allow(SimpleTokenAuthentication::DeviseFallbackHandler).to receive(:new)
142
+ .and_return('another DeviseFallbackHandler instance')
143
+ end
144
+
145
+ it 'returns that instance', private: true do
146
+ expect(subject.send(:fallback_handler, @options)).to eq 'a DeviseFallbackHandler instance'
147
+ end
148
+
149
+ it 'does not create a new DeviseFallbackHandler instance', private: true do
150
+ expect(SimpleTokenAuthentication::DeviseFallbackHandler).not_to receive(:new)
151
+ expect(subject.send(:fallback_handler, @options)).not_to eq 'another DeviseFallbackHandler instance'
152
+ end
133
153
  end
134
154
  end
135
155
 
136
- context 'when a FallbackAuthenticationHandler instance was already created' do
156
+ context 'when the Exception fallback is enabled', fallback_option: true do
137
157
 
138
158
  before(:each) do
139
- subject.fallback_authentication_handler
140
- # let's make any new FallbackAuthenticationHandler distinct from the first
141
- allow(SimpleTokenAuthentication::FallbackAuthenticationHandler).to receive(:new)
142
- .and_return('another FallbackAuthenticationHandler instance')
159
+ @options = { fallback: :exception }
143
160
  end
144
161
 
145
- it 'returns that instance', private: true do
146
- expect(subject.fallback_authentication_handler).to eq 'a FallbackAuthenticationHandler instance'
162
+ context 'when called for the first time' do
163
+
164
+ it 'creates a new ExceptionFallbackHandler instance', private: true do
165
+ expect(SimpleTokenAuthentication::ExceptionFallbackHandler).to receive(:new)
166
+ expect(subject.send(:fallback_handler, @options)).to eq 'an ExceptionFallbackHandler instance'
167
+ end
147
168
  end
148
169
 
149
- it 'does not create a new FallbackAuthenticationHandler instance', private: true do
150
- expect(SimpleTokenAuthentication::FallbackAuthenticationHandler).not_to receive(:new)
151
- expect(subject.fallback_authentication_handler).not_to eq 'another FallbackAuthenticationHandler instance'
170
+ context 'when a ExceptionFallbackHandler instance was already created' do
171
+
172
+ before(:each) do
173
+ subject.send(:fallback_handler, @options)
174
+ # let's make any new ExceptionFallbackHandler distinct from the first
175
+ allow(SimpleTokenAuthentication::ExceptionFallbackHandler).to receive(:new)
176
+ .and_return('another ExceptionFallbackHandler instance')
177
+ end
178
+
179
+ it 'returns that instance', private: true do
180
+ expect(subject.send(:fallback_handler, @options)).to eq 'an ExceptionFallbackHandler instance'
181
+ end
182
+
183
+ it 'does not create a new ExceptionFallbackHandler instance', private: true do
184
+ expect(SimpleTokenAuthentication::ExceptionFallbackHandler).not_to receive(:new)
185
+ expect(subject.send(:fallback_handler, @options)).not_to eq 'another ExceptionFallbackHandler instance'
186
+ end
152
187
  end
153
188
  end
154
189
  end
@@ -0,0 +1,8 @@
1
+ RSpec.shared_examples 'a fallback handler' do
2
+
3
+ let(:fallback_handler) { described_class.new() }
4
+
5
+ it 'responds to :fallback!', private: true do
6
+ expect(fallback_handler).to respond_to :fallback!
7
+ end
8
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_token_authentication
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.1
4
+ version: 1.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gonzalo Bulnes Guilpain
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-28 00:00:00.000000000 Z
11
+ date: 2015-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionmailer
@@ -152,9 +152,10 @@ files:
152
152
  - lib/simple_token_authentication/adapters/rails_adapter.rb
153
153
  - lib/simple_token_authentication/adapters/rails_api_adapter.rb
154
154
  - lib/simple_token_authentication/configuration.rb
155
+ - lib/simple_token_authentication/devise_fallback_handler.rb
155
156
  - lib/simple_token_authentication/entities_manager.rb
156
157
  - lib/simple_token_authentication/entity.rb
157
- - lib/simple_token_authentication/fallback_authentication_handler.rb
158
+ - lib/simple_token_authentication/exception_fallback_handler.rb
158
159
  - lib/simple_token_authentication/sign_in_handler.rb
159
160
  - lib/simple_token_authentication/token_authentication_handler.rb
160
161
  - lib/simple_token_authentication/token_comparator.rb
@@ -173,10 +174,11 @@ files:
173
174
  - spec/lib/simple_token_authentication/adapters/rails_adapter_spec.rb
174
175
  - spec/lib/simple_token_authentication/adapters/rails_api_adapter_spec.rb
175
176
  - spec/lib/simple_token_authentication/configuration_spec.rb
177
+ - spec/lib/simple_token_authentication/devise_fallback_handler_spec.rb
176
178
  - spec/lib/simple_token_authentication/entities_manager_spec.rb
177
179
  - spec/lib/simple_token_authentication/entity_spec.rb
178
180
  - spec/lib/simple_token_authentication/errors_spec.rb
179
- - spec/lib/simple_token_authentication/fallback_authentication_handler_spec.rb
181
+ - spec/lib/simple_token_authentication/exception_fallback_handler_spec.rb
180
182
  - spec/lib/simple_token_authentication/sign_in_handler_spec.rb
181
183
  - spec/lib/simple_token_authentication/token_authentication_handler_spec.rb
182
184
  - spec/lib/simple_token_authentication/token_comparator_spec.rb
@@ -188,6 +190,7 @@ files:
188
190
  - spec/support/spec_for_authentication_handler_interface.rb
189
191
  - spec/support/spec_for_configuration_option_interface.rb
190
192
  - spec/support/spec_for_entities_manager_interface.rb
193
+ - spec/support/spec_for_fallback_handler_interface.rb
191
194
  - spec/support/spec_for_sign_in_handler_interface.rb
192
195
  - spec/support/spec_for_token_comparator_interface.rb
193
196
  - spec/support/spec_for_token_generator_interface.rb
@@ -212,7 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
212
215
  version: '0'
213
216
  requirements: []
214
217
  rubyforge_project:
215
- rubygems_version: 2.4.6
218
+ rubygems_version: 2.4.7
216
219
  signing_key:
217
220
  specification_version: 4
218
221
  summary: Simple (but safe) token authentication for Rails apps or API with Devise.
@@ -220,12 +223,13 @@ test_files:
220
223
  - spec/lib/simple_token_authentication_spec.rb
221
224
  - spec/lib/simple_token_authentication/entities_manager_spec.rb
222
225
  - spec/lib/simple_token_authentication/sign_in_handler_spec.rb
223
- - spec/lib/simple_token_authentication/fallback_authentication_handler_spec.rb
226
+ - spec/lib/simple_token_authentication/exception_fallback_handler_spec.rb
224
227
  - spec/lib/simple_token_authentication/token_comparator_spec.rb
225
228
  - spec/lib/simple_token_authentication/configuration_spec.rb
226
229
  - spec/lib/simple_token_authentication/token_generator_spec.rb
227
230
  - spec/lib/simple_token_authentication/acts_as_token_authenticatable_spec.rb
228
231
  - spec/lib/simple_token_authentication/acts_as_token_authentication_handler_spec.rb
232
+ - spec/lib/simple_token_authentication/devise_fallback_handler_spec.rb
229
233
  - spec/lib/simple_token_authentication/token_authentication_handler_spec.rb
230
234
  - spec/lib/simple_token_authentication/errors_spec.rb
231
235
  - spec/lib/simple_token_authentication/adapters/active_record_adapter_spec.rb
@@ -245,6 +249,7 @@ test_files:
245
249
  - spec/support/spec_for_adapter.rb
246
250
  - spec/support/specs_for_token_authentication_handler_interface.rb
247
251
  - spec/support/spec_for_token_comparator_interface.rb
252
+ - spec/support/spec_for_fallback_handler_interface.rb
248
253
  - spec/support/spec_for_configuration_option_interface.rb
249
254
  - spec/support/spec_for_sign_in_handler_interface.rb
250
255
  - spec/support/dummy_classes_helper.rb