Problemas com authorizer vtex service

Ao tentar realizar uma verificação basiada no cookie da requesição sempre ocorre uma falha, onde funciona no site do exemplo https://{{vendor}}.myvtex.com , mas no site da loja mesmo a verificação sempre falha pois o ctx.vtex.storeUserAuthToken está sempre nulo como fazer para enviar este token nas minhas requisições do frontend com o backend exemplo:
No frontend faço uma requisição com os seguintes paramêtros:

      
     const { loading: loadingAuth, data: dataAuth } = useFullSession()
      const cookie = dataAuth?.session?.namespaces?.cookie
      const token = cookie?.VtexIdclientAutCookie?.value ?? cookie?.VtexIdclientAutCookie_t05130?.value ?? ' '

      const optionsGetFromDocuments: any = {
        method: 'GET',
        headers: {
          'Content-Type': 'application/json',
          Accept: 'application/json',
          'Access-Control-Allow-Origin': '*',
          'Cookie': 'VtexIdclientAutCookie=' + token
        }
      }
      const responseJson = await fetch(
        `/_v/budget/${email}`,
        optionsGetFromDocuments
      )

Onde isto até mesmo retirando o header ‘Cookie’ funciona quando estou no site https://{{vendor}}.myvtex.com , recebo o token do usuário e faço a validação

No backend eu tenho algo como :

ctx.set('Cache-Control','no-cache, no-store, must-revalidate');
  ctx.set('X-VTEX-Use-Https','true')
  ctx.set('Proxy-Authorization','ctx.authToken')
  ctx.set('Access-Control-Allow-Origin','*')
  ctx.set('Access-Control-Allow-Credentials','true')
  const {
    vtex: {
      route: { params },
    },
  } = ctx

  const { email } = params
  const user = await ctx.clients.profile.getUserByToken(ctx.vtex.adminUserAuthToken ?? ctx.vtex.storeUserAuthToken ?? '').catch((reason: any) => {
    return reason?.response?.data
  })
  if ((user && user?.userId) && ctx.vtex.adminUserAuthToken) {
    await next()
  }else if ((user && user?.userId) && ctx.vtex.storeUserAuthToken) {
    if (email !== user.user) {
      throw new NotFoundError({
        message: 'not found',
        stack: 'not found'
      })
    } else {
      await next()
    }
  } else {
    throw new ForbiddenError({
      message: 'Forbidden',
      stack: 'forbidden'
    })
  }

porém sempre recebo undefined dos tokens ctx.vtex.storeUserAuthToken e ctx.vtex.adminUserAuthToken

oque devo fazer para receber esses valores na loja de produção também ?

Uma dúvida: você testou na loja em produção com um usuário logado?

isso mesmo logado como um usuário o token tem valor consigo por exemplo retornar um console.log() com o valor do cookie porém a requisição falha do mesmo jeito.
uma curiosidade é que se eu seto o cookie no postman tanto como:

Cookie: VtexIdclientAutCookie_{{vendor}}=token

,tanto como :

Cookie: VtexIdclientAutCookie=token

também não consigo fazer as requisições na rota da forbbiden , pelo postman no caso nem aparece no console, mas caso esteja em um workspace com o app linkado, fazendo a requisição do mesmo jeito por outro app consigo normalmente

Hi!

Make sure the VTEX IO Service URL is prefixed with /_v/private (e.g. /_v/private/budget/${email}), otherwise the internal VTEX infrastructure will strip all you cookies before reaching your service.

The the documentation here:

Cheers!

2 Likes

I could only see this post today thank you helped me a lot