Make sure the cookie exists before we clear the session in redis
(cherry picked from commit 6d7f0ab57d554706425f76aed4df60717dd63ece)
This commit is contained in:
		
							parent
							
								
									22199fa417
								
							
						
					
					
						commit
						c1ae0ca807
					
				|  | @ -148,13 +148,6 @@ func (store *SessionStore) loadSessionFromString(value string) (*sessions.Sessio | ||||||
| // Clear clears any saved session information for a given ticket cookie
 | // Clear clears any saved session information for a given ticket cookie
 | ||||||
| // from redis, and then clears the session
 | // from redis, and then clears the session
 | ||||||
| func (store *SessionStore) Clear(rw http.ResponseWriter, req *http.Request) error { | func (store *SessionStore) Clear(rw http.ResponseWriter, req *http.Request) error { | ||||||
| 	requestCookie, _ := req.Cookie(store.CookieOptions.CookieName) |  | ||||||
| 
 |  | ||||||
| 	val, _, ok := cookie.Validate(requestCookie, store.CookieOptions.CookieSecret, store.CookieOptions.CookieExpire) |  | ||||||
| 	if !ok { |  | ||||||
| 		return fmt.Errorf("Cookie Signature not valid") |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// We go ahead and clear the cookie first, always.
 | 	// We go ahead and clear the cookie first, always.
 | ||||||
| 	clearCookie := store.makeCookie( | 	clearCookie := store.makeCookie( | ||||||
| 		req, | 		req, | ||||||
|  | @ -164,6 +157,20 @@ func (store *SessionStore) Clear(rw http.ResponseWriter, req *http.Request) erro | ||||||
| 	) | 	) | ||||||
| 	http.SetCookie(rw, clearCookie) | 	http.SetCookie(rw, clearCookie) | ||||||
| 
 | 
 | ||||||
|  | 	// If there was an existing cookie we should clear the session in redis
 | ||||||
|  | 	requestCookie, err := req.Cookie(store.CookieOptions.CookieName) | ||||||
|  | 	if err != nil && err == http.ErrNoCookie { | ||||||
|  | 		// No existing cookie so can't clear redis
 | ||||||
|  | 		return nil | ||||||
|  | 	} else if err != nil { | ||||||
|  | 		return fmt.Errorf("error retrieving cookie: %v", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	val, _, ok := cookie.Validate(requestCookie, store.CookieOptions.CookieSecret, store.CookieOptions.CookieExpire) | ||||||
|  | 	if !ok { | ||||||
|  | 		return fmt.Errorf("Cookie Signature not valid") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	// We only return an error if we had an issue with redis
 | 	// We only return an error if we had an issue with redis
 | ||||||
| 	// If there's an issue decoding the ticket, ignore it
 | 	// If there's an issue decoding the ticket, ignore it
 | ||||||
| 	ticket, _ := decodeTicket(store.CookieOptions.CookieName, val) | 	ticket, _ := decodeTicket(store.CookieOptions.CookieName, val) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue