@@ -312,3 +312,40 @@ func TestUserWithoutSessionUUID(t *testing.T) {
312312 require .NoError (t , err )
313313
314314}
315+
316+ // TestUserDeleteAllSessions changes the session UUID on a user such that existing sessions should not be usable.
317+ func TestUserDeleteAllSessions (t * testing.T ) {
318+ ctx := base .TestCtx (t )
319+ testBucket := base .GetTestBucket (t )
320+ defer testBucket .Close (ctx )
321+ dataStore := testBucket .GetSingleDataStore ()
322+ auth := NewTestAuthenticator (t , dataStore , nil , DefaultAuthenticatorOptions (ctx ))
323+ const username = "Alice"
324+ user , err := auth .NewUser (username , "password" , base.Set {})
325+ require .NoError (t , err )
326+ require .NotNil (t , user )
327+ require .NoError (t , auth .Save (user ))
328+
329+ // Create session with a username and valid TTL of 2 hours.
330+ session , err := auth .CreateSession (ctx , user , 2 * time .Hour )
331+ require .NoError (t , err )
332+
333+ session , err = auth .GetSession (session .ID )
334+ require .NoError (t , err )
335+
336+ request , err := http .NewRequest (http .MethodGet , "" , nil )
337+ require .NoError (t , err )
338+ request .AddCookie (auth .MakeSessionCookie (session , true , true ))
339+ recorder := httptest .NewRecorder ()
340+
341+ _ , err = auth .AuthenticateCookie (request , recorder )
342+ require .NoError (t , err )
343+
344+ // h.deleteUserSessions() equivalent
345+ user .UpdateSessionUUID ()
346+ err = auth .Save (user )
347+ require .NoError (t , err )
348+
349+ _ , err = auth .AuthenticateCookie (request , recorder )
350+ require .EqualError (t , err , "401 Session no longer valid for user" )
351+ }
0 commit comments