@@ -161,20 +161,21 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc {
161
161
// Initialize
162
162
// Split sources
163
163
sources := strings .Split (config .TokenLookup , "," )
164
- var extractor jwtExtractor
164
+ var extractors [] jwtExtractor
165
165
for _ , source := range sources {
166
166
parts := strings .Split (source , ":" )
167
167
168
- extractor = jwtFromHeader (parts [1 ], config .AuthScheme )
169
168
switch parts [0 ] {
170
169
case "query" :
171
- extractor = jwtFromQuery (parts [1 ])
170
+ extractors = append ( extractors , jwtFromQuery (parts [1 ]) )
172
171
case "param" :
173
- extractor = jwtFromParam (parts [1 ])
172
+ extractors = append ( extractors , jwtFromParam (parts [1 ]) )
174
173
case "cookie" :
175
- extractor = jwtFromCookie (parts [1 ])
174
+ extractors = append ( extractors , jwtFromCookie (parts [1 ]) )
176
175
case "form" :
177
- extractor = jwtFromForm (parts [1 ])
176
+ extractors = append (extractors , jwtFromForm (parts [1 ]))
177
+ case "header" :
178
+ extractors = append (extractors , jwtFromHeader (parts [1 ], config .AuthScheme ))
178
179
}
179
180
}
180
181
@@ -187,8 +188,17 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc {
187
188
if config .BeforeFunc != nil {
188
189
config .BeforeFunc (c )
189
190
}
190
-
191
- auth , err := extractor (c )
191
+ var auth string
192
+ var err error
193
+ for _ , extractor := range extractors {
194
+ // Extract token from extractor, if it's not fail break the loop and
195
+ // set auth
196
+ auth , err = extractor (c )
197
+ if err == nil {
198
+ break
199
+ }
200
+ }
201
+ // If none of extractor has a token, handle error
192
202
if err != nil {
193
203
if config .ErrorHandler != nil {
194
204
return config .ErrorHandler (err )
@@ -199,6 +209,7 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc {
199
209
}
200
210
return err
201
211
}
212
+
202
213
token := new (jwt.Token )
203
214
// Issue #647, #656
204
215
if _ , ok := config .Claims .(jwt.MapClaims ); ok {
0 commit comments