# Tokens gekoppeld aan een browser met ENCRYPTREQ() en DECRYPTREQ()

> Versleutel een waarde samen met de user agent (en optioneel het IP-adres) van het verzoek en lees haar alleen terug van dezelfde client.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: nl
Content-SHA256: 23d420db793d3836118436bbfa13a3ea1757d2f50354d1eb7461e3194d924895
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

`ENCRYPTREQ($, value, key, [strict])` versleutelt een waarde **samen met de user agent van het verzoek** en geeft een teksttoken terug. `DECRYPTREQ($, token, key)` leest de waarde terug en geeft niets terug (`undefined`) als de sleutel fout is, het token leeg is of het verzoek van een andere client komt. Met `strict` op `true` is ook het IP-adres van het verzoek onderdeel van het token, zodat het ook niet meer werkt als het adres verandert.

Gebruik het voor waarden die je aan de browser geeft en van dezelfde browser terugverwacht: een kortlevende link, een downloadadres, een formuliertoken. Het vervangt geen sessie: de user agent is makkelijk te kopiëren. Voor tokens die niet van het verzoek afhangen, zie het recept over versleutelen en ontsleutelen.

```js controllers/tokens.js
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 });
}
```
