Skip to content

Commit 13ecc32

Browse files
committed
Check multiple token source
Signed-off-by: Kaan Karakaya <[email protected]>
1 parent 65bcbdf commit 13ecc32

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

middleware/jwt.go

+19-8
Original file line numberDiff line numberDiff line change
@@ -161,20 +161,21 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc {
161161
// Initialize
162162
// Split sources
163163
sources := strings.Split(config.TokenLookup, ",")
164-
var extractor jwtExtractor
164+
var extractors []jwtExtractor
165165
for _, source := range sources {
166166
parts := strings.Split(source, ":")
167167

168-
extractor = jwtFromHeader(parts[1], config.AuthScheme)
169168
switch parts[0] {
170169
case "query":
171-
extractor = jwtFromQuery(parts[1])
170+
extractors = append(extractors, jwtFromQuery(parts[1]))
172171
case "param":
173-
extractor = jwtFromParam(parts[1])
172+
extractors = append(extractors, jwtFromParam(parts[1]))
174173
case "cookie":
175-
extractor = jwtFromCookie(parts[1])
174+
extractors = append(extractors, jwtFromCookie(parts[1]))
176175
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))
178179
}
179180
}
180181

@@ -187,8 +188,17 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc {
187188
if config.BeforeFunc != nil {
188189
config.BeforeFunc(c)
189190
}
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
192202
if err != nil {
193203
if config.ErrorHandler != nil {
194204
return config.ErrorHandler(err)
@@ -199,6 +209,7 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc {
199209
}
200210
return err
201211
}
212+
202213
token := new(jwt.Token)
203214
// Issue #647, #656
204215
if _, ok := config.Claims.(jwt.MapClaims); ok {

0 commit comments

Comments
 (0)