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.
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
});2
3
4
5
6
7
8
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:
{
options: {
state: {
parse: true, // analisa e armazena em request.state
failAction: 'error', // também pode ser 'ignore' ou 'log'
},
},
}2
3
4
5
6
7
8
Definindo um cookie
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:
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:
reply('Hello').state('data', 'test', { encoding: 'none' });Eliminando um cookie
O cookie pode ser eliminado invocando o método unstate() no objecto response:
reply('Hello').unstate('data');