mirror of
https://github.com/labstack/echo.git
synced 2025-04-11 11:42:01 +02:00
feat: Add a new ErrorHandlerWithContext (#1328)
* feat: Add a new ErrorHandlerWithContext This commit adds a new error handler, which is passed the current context, so that you can add custom redirects or even other kinds of responses. For example: ```go e.Use(middleware.JWTWithConfig(middleware.JWTConfig{ SigningKey: []byte("secret"), TokenLookup: "query:token", ErrorHandlerWithContext: func(err error, c echo.Context) error { // do stuff with context and err switch err.(type) { case jwt.ValidationError: return c.Redirect(http.StatusSeeOther, "/login") } return err }, })) ``` * chore: address golint issues
This commit is contained in:
parent
6b9408d1d1
commit
31361576e8
@ -25,6 +25,9 @@ type (
|
|||||||
// ErrorHandler defines a function which is executed for an invalid token.
|
// ErrorHandler defines a function which is executed for an invalid token.
|
||||||
// It may be used to define a custom JWT error.
|
// It may be used to define a custom JWT error.
|
||||||
ErrorHandler JWTErrorHandler
|
ErrorHandler JWTErrorHandler
|
||||||
|
|
||||||
|
// ErrorHandlerWithContext is almost identical to ErrorHandler, but it's passed the current context.
|
||||||
|
ErrorHandlerWithContext JWTErrorHandlerWithContext
|
||||||
|
|
||||||
// Signing key to validate token. Used as fallback if SigningKeys has length 0.
|
// Signing key to validate token. Used as fallback if SigningKeys has length 0.
|
||||||
// Required. This or SigningKeys.
|
// Required. This or SigningKeys.
|
||||||
@ -69,6 +72,9 @@ type (
|
|||||||
// JWTErrorHandler defines a function which is executed for an invalid token.
|
// JWTErrorHandler defines a function which is executed for an invalid token.
|
||||||
JWTErrorHandler func(error) error
|
JWTErrorHandler func(error) error
|
||||||
|
|
||||||
|
// JWTErrorHandlerWithContext is almost identical to JWTErrorHandler, but it's passed the current context.
|
||||||
|
JWTErrorHandlerWithContext func(error, echo.Context) error
|
||||||
|
|
||||||
jwtExtractor func(echo.Context) (string, error)
|
jwtExtractor func(echo.Context) (string, error)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -177,6 +183,10 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc {
|
|||||||
if config.ErrorHandler != nil {
|
if config.ErrorHandler != nil {
|
||||||
return config.ErrorHandler(err)
|
return config.ErrorHandler(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if config.ErrorHandlerWithContext != nil {
|
||||||
|
return config.ErrorHandlerWithContext(err, c)
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
token := new(jwt.Token)
|
token := new(jwt.Token)
|
||||||
@ -199,6 +209,9 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc {
|
|||||||
if config.ErrorHandler != nil {
|
if config.ErrorHandler != nil {
|
||||||
return config.ErrorHandler(err)
|
return config.ErrorHandler(err)
|
||||||
}
|
}
|
||||||
|
if config.ErrorHandlerWithContext != nil {
|
||||||
|
return config.ErrorHandlerWithContext(err, c)
|
||||||
|
}
|
||||||
return &echo.HTTPError{
|
return &echo.HTTPError{
|
||||||
Code: http.StatusUnauthorized,
|
Code: http.StatusUnauthorized,
|
||||||
Message: "invalid or expired jwt",
|
Message: "invalid or expired jwt",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user