Skip to content

Cookies

Este tutorial é compatível com hapi v16

Quando estamos desenvolvendo uma aplicação web, usar cookies é com bastante frequência uma necessidade. Ao utilizar o hapi, cookies são flexíveis, seguros e simples.

Configurando o servidor

O hapi possui várias opções configuráveis ​​ao lidar com cookies. Os padrões são bons para a maioria dos casos, mas podem ser alterados quando necessário.

Para configurá-los, invoque server.state(nome, opções) onde nome é o nome em string do cookie e opções é um objeto usado para configurar o cookie específico.

javascript
server.state('data', {
  ttl: null,
  isSecure: true,
  isHttpOnly: true,
  encoding: 'base64json',
  clearInvalid: false, // remove cookies inválidos
  strictHeader: true, // não permite violações da RFC 6265
});

Esta configuração fará com que o cookie chamado data tenha o tempo de vida da sessão(será apagado quando o navegador for fechado), e seja sinalizado como seguro e apenas HTTP (veja RFC 6265, especificamente as seções 4.1.2.5 e 4.1.2.6 para mais informações), e informa ao hapi que o valor é um JSON String codificado em base64. A documentação completa para as opções do server.state () podem ser encontradas em referência da API.

Além disso, você pode passar dois parâmetros para o options ao adicionar uma rota:

json5
{
  options: {
    state: {
      parse: true, // analisa e armazena em request.state
      failAction: 'error', // também pode ser 'ignore' ou 'log'
    },
  },
}

A definição de um cookie é feita através da interface reply() em um manipulador de requisição, pré-requisito, ou ponto de extensão do ciclo de vida da requisição e se parece com o seguinte:

javascript
reply('Hello').state('data', { firstVisit: false });

Neste exemplo, o hapi irá responder com a string Hello, bem como definir um cookie chamado data a uma string codificada em base64 cuja representação é o objetivo especificado.

Sobrescrevendo opções

Ao definir um cookie, você também pode passar as mesmas opções disponíveis para server.state() como um terceiro parâmetro, tais como:

javascript
reply('Hello').state('data', 'test', { encoding: 'none' });

O cookie pode ser eliminado invocando o método unstate() no objecto response:

javascript
reply('Hello').unstate('data');

Deploys by Netlify