@@ -328,6 +328,38 @@ test.group('Csrf', () => {
328
328
)
329
329
} )
330
330
331
+ test ( 'share CSRF token with templates and request even when request fails' , async ( {
332
+ assert,
333
+ } ) => {
334
+ const app = await setup ( )
335
+ const ctx = new HttpContextFactory ( ) . create ( )
336
+ const encrpytion = await app . container . make ( 'encryption' )
337
+ const middleware = await new SessionMiddlewareFactory ( ) . create ( )
338
+
339
+ await middleware . handle ( ctx , async ( ) => {
340
+ ctx . route = { pattern : '/' } as any
341
+ ctx . request . request . method = 'PATCH'
342
+
343
+ const secret = await tokens . secret ( )
344
+ const csrfToken = tokens . create ( secret )
345
+ ctx . request . updateBody ( { _csrf : csrfToken } )
346
+ } )
347
+
348
+ const csrf = csrfFactory ( { enabled : true , enableXsrfCookie : false } , encrpytion , Edge . create ( ) )
349
+ await assert . rejects ( async ( ) => csrf ( ctx ) , new E_BAD_CSRF_TOKEN ( ) . message )
350
+ assert . exists ( ctx . request . csrfToken )
351
+
352
+ assert . equal (
353
+ await ctx . view . renderRaw ( '{{ csrfMeta() }}' ) ,
354
+ `<meta name='csrf-token' content='${ ctx . request . csrfToken } '>`
355
+ )
356
+
357
+ assert . equal (
358
+ await ctx . view . renderRaw ( '{{ csrfField() }}' ) ,
359
+ `<input type='hidden' name='_csrf' value='${ ctx . request . csrfToken } '>`
360
+ )
361
+ } )
362
+
331
363
test ( 'generate csrf token and share as a cookie when enableXsrfCookie is true' , async ( {
332
364
assert,
333
365
} ) => {
0 commit comments