@@ -182,26 +182,29 @@ function getRandomBytes(size: number = 32) {
182182}
183183
184184export async function handlePkceVerifier ( event : H3Event ) {
185- let verifier = getCookie ( event , 'nuxt-auth-pkce' )
186- if ( verifier ) {
187- deleteCookie ( event , 'nuxt-auth-pkce' )
188- return { code_verifier : verifier }
189- }
185+ const query = getQuery < { code ?: string } > ( event )
190186
191187 // Create new verifier
192- verifier = encodeBase64Url ( getRandomBytes ( ) )
193- setCookie ( event , 'nuxt-auth-pkce' , verifier )
194-
195- // Get pkce
196- const encodedPkce = new TextEncoder ( ) . encode ( verifier )
197- const pkceHash = await subtle . digest ( 'SHA-256' , encodedPkce )
198- const pkce = encodeBase64Url ( new Uint8Array ( pkceHash ) )
199-
200- return {
201- code_verifier : verifier ,
202- code_challenge : pkce ,
203- code_challenge_method : 'S256' ,
188+ if ( ! query . code ) {
189+ const verifier = encodeBase64Url ( getRandomBytes ( ) )
190+ setCookie ( event , 'nuxt-auth-pkce' , verifier )
191+
192+ // Get pkce
193+ const encodedPkce = new TextEncoder ( ) . encode ( verifier )
194+ const pkceHash = await subtle . digest ( 'SHA-256' , encodedPkce )
195+ const pkce = encodeBase64Url ( new Uint8Array ( pkceHash ) )
196+
197+ return {
198+ code_verifier : verifier ,
199+ code_challenge : pkce ,
200+ code_challenge_method : 'S256' ,
201+ }
204202 }
203+ // If the verifier is in the cookie, get it from the cookie and delete the cookie
204+ const verifier = getCookie ( event , 'nuxt-auth-pkce' )
205+ deleteCookie ( event , 'nuxt-auth-pkce' )
206+
207+ return { code_verifier : verifier }
205208}
206209
207210export async function handleState ( event : H3Event ) {
0 commit comments