# Tokenuri legate de un browser cu ENCRYPTREQ() și DECRYPTREQ()

> Criptează o valoare împreună cu user agent-ul (și opțional adresa IP) cererii și citește-o înapoi doar de la același client.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: ro
Content-SHA256: 65f3229a1351550e48ddeb8de99d2c8f5ed40add2b50eba19a0200c624e819d2
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

`ENCRYPTREQ($, value, key, [strict])` criptează o valoare **împreună cu user agent-ul cererii** și returnează un token text. `DECRYPTREQ($, token, key)` citește valoarea înapoi și nu returnează nimic (`undefined`) când cheia este greșită, tokenul este gol sau cererea vine de la un alt client. Cu `strict` setat la `true`, adresa IP a cererii face și ea parte din token, deci încetează să funcționeze și atunci când adresa se schimbă.

Folosește-l pentru valori pe care le dai browserului și le aștepți înapoi de la același browser: un link de scurtă durată, o adresă de descărcare, un token de formular. Nu înlocuiește o sesiune: user agent-ul se copiază ușor. Pentru tokenuri care nu depind de cerere vezi rețeta despre criptare și decriptare.

```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 });
}
```
