@@ -349,25 +349,13 @@ test.group('Jwt guard | authenticate', () => {
349349 } )
350350 }
351351
352- await User . createMany ( [
353- {
354- 355- username : 'john' ,
356- password : 'password' ,
357- } ,
358- {
359- 360- username : 'jane' ,
361- password : 'password' ,
362- } ,
363- ] )
364-
365352 const user = await User . create ( {
366353367354 username : 'maxime' ,
368355 password : 'password' ,
369356 } )
370357 const refreshToken = await User . refreshTokens . create ( user )
358+ await user . delete ( )
371359 ctx . request . request . headers . authorization = `Bearer ${ refreshToken . value ?. release ( ) } `
372360 const [ result ] = await Promise . allSettled ( [ guard . authenticateWithRefreshToken ( ) ] )
373361 assert . equal ( result ! . status , 'rejected' )
@@ -380,6 +368,56 @@ test.group('Jwt guard | authenticate', () => {
380368 assert . isTrue ( guard . authenticationAttempted )
381369 } )
382370
371+ test ( 'throw error when the refresh token is invalid' , async ( { assert } ) => {
372+ const ctx = new HttpContextFactory ( ) . create ( )
373+ const userProvider = new JwtFakeUserProvider ( )
374+ const db = await createDatabase ( )
375+ await createTables ( db )
376+ const guard = new JwtGuard ( ctx , userProvider , {
377+ secret : 'thisisasecret' ,
378+ refreshTokenUserProvider : tokensUserProvider ( {
379+ tokens : 'refreshTokens' ,
380+ async model ( ) {
381+ return {
382+ default : User ,
383+ }
384+ } ,
385+ } ) ,
386+ } )
387+
388+ class User extends BaseModel {
389+ @column ( { isPrimary : true } )
390+ declare id : number
391+
392+ @column ( )
393+ declare username : string
394+
395+ @column ( )
396+ declare email : string
397+
398+ @column ( )
399+ declare password : string
400+
401+ static refreshTokens = DbAccessTokensProvider . forModel ( User , {
402+ prefix : 'rt_' ,
403+ table : 'jwt_refresh_tokens' ,
404+ type : 'jwt_refresh_token' ,
405+ tokenSecretLength : 40 ,
406+ } )
407+ }
408+
409+ ctx . request . request . headers . authorization = `Bearer abcd`
410+ const [ result ] = await Promise . allSettled ( [ guard . authenticateWithRefreshToken ( ) ] )
411+ assert . equal ( result ! . status , 'rejected' )
412+ if ( result ! . status === 'rejected' ) {
413+ assert . instanceOf ( result ! . reason , errors . E_UNAUTHORIZED_ACCESS )
414+ }
415+ assert . isUndefined ( guard . user )
416+ assert . throws ( ( ) => guard . getUserOrFail ( ) , 'Unauthorized access' )
417+ assert . isFalse ( guard . isAuthenticated )
418+ assert . isTrue ( guard . authenticationAttempted )
419+ } )
420+
383421 test ( 'it should return a token when user is authenticated' , async ( { assert } ) => {
384422 const ctx = new HttpContextFactory ( ) . create ( )
385423 const userProvider = new JwtFakeUserProvider ( )
0 commit comments