diff --git a/pkg/services/contexthandler/contexthandler.go b/pkg/services/contexthandler/contexthandler.go index 1e435454ba9..f255118523d 100644 --- a/pkg/services/contexthandler/contexthandler.go +++ b/pkg/services/contexthandler/contexthandler.go @@ -397,8 +397,11 @@ func (h *ContextHandler) initContextWithToken(reqContext *models.ReqContext, org token, err := h.AuthTokenService.LookupToken(ctx, rawToken) if err != nil { - reqContext.Logger.Error("Failed to look up user based on cookie", "error", err) + reqContext.Logger.Warn("Failed to look up user based on cookie", "error", err) + // Burn the cookie in case of failure + reqContext.Resp.Before(h.deleteInvalidCookieEndOfRequestFunc(reqContext)) reqContext.LookupTokenErr = err + return false } @@ -420,6 +423,18 @@ func (h *ContextHandler) initContextWithToken(reqContext *models.ReqContext, org return true } +func (h *ContextHandler) deleteInvalidCookieEndOfRequestFunc(reqContext *models.ReqContext) web.BeforeFunc { + return func(w web.ResponseWriter) { + if w.Written() { + reqContext.Logger.Debug("Response written, skipping invalid cookie delete") + return + } + + reqContext.Logger.Debug("Expiring invalid cookie") + cookies.DeleteCookie(reqContext.Resp, h.Cfg.LoginCookieName, nil) + } +} + func (h *ContextHandler) rotateEndOfRequestFunc(reqContext *models.ReqContext, authTokenService models.UserTokenService, token *models.UserToken) web.BeforeFunc { return func(w web.ResponseWriter) {