Tokens ligados a um navegador com ENCRYPTREQ() e DECRYPTREQ()
ENCRYPTREQ($, value, key, [strict]) cifra um valor juntamente com o user agent do pedido e devolve um token de texto. DECRYPTREQ($, token, key) lê o valor de volta e não devolve nada (undefined) quando a chave está errada, o token está vazio ou o pedido vem de um cliente diferente. Com strict definido como true, o endereço IP do pedido também faz parte do token, pelo que deixa de funcionar também quando o endereço muda.
Use-o para valores que entrega ao navegador e espera receber de volta do mesmo navegador: uma ligação de curta duração, um endereço de descarga, um token de formulário. Não substitui uma sessão: o user agent é fácil de copiar. Para tokens que não dependem do pedido, veja a receita sobre cifrar e decifrar.
exports.install = function() {
ROUTE('GET /issue/', issue);
ROUTE('GET /read/', read);
ROUTE('GET /read-wrong-key/', wrongkey);
};
function issue($) {
$.json({ token: ENCRYPTREQ($, { id: 5 }, 'my-secret'), strict: ENCRYPTREQ($, 'only-here', 'my-secret', true) });
}
function read($) {
$.json({ value: DECRYPTREQ($, $.query.token, 'my-secret') || null });
}
function wrongkey($) {
$.json({ value: DECRYPTREQ($, $.query.token, 'another-secret') || null });
}