Skip to main content
Serve para quando uma página da loja precisa conversar com um sistema seu, e esse sistema precisa saber com quem está falando. Uma área logada, um painel, um formulário que já vem preenchido, um histórico que vive fora da CentralCart. A divisão de responsabilidade é o ponto central: A CentralCart atesta a identidade e para por aí. O que aquele cliente pode ver, fazer ou receber é regra sua, e ela continua onde está hoje.

Por que não dá para ler a sessão direto

Duas saídas parecem óbvias e as duas são armadilhas:
  • O cookie de sessão é httpOnly e preso ao domínio da loja. O seu backend, em outro domínio, nunca o recebe.
  • Ler o e-mail pelo JavaScript da página e enviar ao seu servidor não prova nada. Qualquer pessoa manda qualquer e-mail para o seu endpoint.
O passe existe para resolver exatamente isso: o navegador carrega um valor que não serve para nada sozinho, e quem o troca por identidade é o seu servidor.

Antes de começar

Crie uma chave de API na sua loja com o escopo Identificar o cliente logado (customers:identify) e guarde como secret no seu backend.
Essa chave nunca vai para o HTML nem para o JavaScript da página. Ela fica só no seu servidor. É ela que dá sentido ao passe, então quem tiver a chave pode resolver qualquer passe daquela loja.

O fluxo

1

A página pede um passe

A chamada acontece no próprio domínio da loja, então a sessão do cliente é reconhecida sozinha. Não precisa enviar token nenhum.
2

A página entrega o passe ao seu backend

Libere CORS para o domínio da loja. Não é preciso cookie da CentralCart nessa chamada, porque a autenticação é o passe.
3

O seu backend troca o passe pela identidade

De servidor para servidor, com a sua chave de API.
O passe é consumido nesse instante. Uma segunda troca do mesmo passe falha.
4

O seu sistema segue com a regra dele

Agora você sabe quem é. O que vem depois é seu.
Emita a sua sessão aqui. O passe serve para começar, não para repetir a cada requisição.

A página completa

O exemplo abaixo é uma página do tema, com cabeçalho e rodapé normais da loja.
O <% unless user %> é experiência, não proteção. Ele evita mostrar uma tela quebrada para quem não está logado. Quem decide de verdade é o seu backend, porque é ele que guarda os dados.

Emitir o passe

Fica no domínio da loja, não em api.centralcart.io. É justamente por ser a mesma origem que o cookie de sessão chega sozinho.
Sem cliente logado, responde 401 com { "error": "CUSTOMER_UNAUTHENTICATED" }. O teto é de 20 passes por minuto, por cliente. Uma página legítima pede um por carregamento.

Trocar o passe

Ver Identificar o cliente logado para a referência completa do endpoint.
O email é a identidade do cliente na loja, e é por ele que você casa com a sua base.

O que sustenta a segurança disso

  • O passe não serve sozinho. Sem a chave de API da loja, ninguém o resolve.
  • Vale uma vez. A primeira troca consome o passe.
  • Vale 60 segundos. Tempo de atravessar da página para o seu servidor, e nada além disso.
  • Vale só na loja que o emitiu. Uma chave de outra loja não resolve.
  • Não carrega sessão. Trocar o passe devolve identidade, nunca um token que permita agir como aquele cliente.
  • Revogação imediata. Revogue a chave no painel e a integração para na hora.
Não coloque o passe na URL. Ele é credencial, e query string sobra em log de acesso, em Referer e no histórico do navegador. Por isso a troca é POST com o passe no corpo.

Perguntas frequentes

Não. Ele faz o login normal da loja, por código de e-mail, Google ou Discord, e a página usa essa sessão.
Não. O passe depende do cookie de sessão, que só é enviado no domínio da loja. Para um front em outro domínio, use a Storefront API, onde o próprio comprador faz login e recebe um token.
Então não precisa de nada disso. Se a pergunta é “este cliente comprou tal produto”, a tag load orders aceita package_id e responde direto no template, sem sistema externo no meio. Veja Obtendo dados.O passe existe para o caso contrário: a resposta está numa base que é sua.
Não. Ele morre em 60 segundos e no primeiro uso. Guarde a sua própria sessão depois da troca.