Ярмарковите земи в Дряново винаги са били прекалено шумни, лепкави и големи за човек толкова тих и малък като Мила Димитрова. На осем години, обвита в мълчание, тя не беше проговорила и дума от миналия ноември — денят, в който загина майка ѝ, полицайката Елена Димитрова. Оттогава светът ѝ се промени изцяло. Думите спряха да имат смисъл. Но едно нещо продължаваше да го има: Рекс.
Рекс беше вярната полицейска куче на Елена, немска овчарка, обучена да следва команди, усеща опасност и защитава. След смъртта на Елена, Рекс беше затворен зад старата станция. Всяка вечер Мила се промъкваше до оградата му и шепнеше в мрака. Рекс никога не отвръщаше, но винаги слушаше. И това беше достатъчно.
Една сутрин Мила тихо събра бурканчето с монети, което беше трупала от години — стотинки за рождени дни, левове от лимонада, сребърни монети, които майка ѝ ѝ беше дала за смелост. Преброи сто и пет лева и тридесет стотинки. После застана до вратата.
Радослава, съпругата на майка ѝ и втората ѝ майка, се опита да я разубеди. „Няма нужда да ходиш на този търг,“ каза тя. „Хайде да похапнем палачинки, скъпи.“ Но Мила поклати глава. Тя имаше обещание да изпълни.
На ярмарковите земи павилионът за търга беше пълен. Някъде между щандовете за пуканки и оборите за животни, истинската причина, поради която Мила дой# Simple JWT (JSON Web Tokens) for PHP
This library provides a simple way to generate and verify **JWT tokens** (RFC 7519) in PHP. The implementation
strives to be as lightweight as possible while not sacrificing security.
**Features:**
✔ Symmetric signing (HMAC) with SHA-256 (“HS256”)—default
✔ Asymmetric signing (RSA) with SHA-256 (“RS256”)
✔ Leeway support for timestamp verification
✔ Fully-unit tested (100% coverage)
✔ Framework-agnostic (works with any project)
✔ PSR-12 compliant
✔ No dependencies (except PHP 8.0+)
## Why?
JWT is an industry standard (RFC 7519) and is widely used for authentication (especially for APIs). JWT allows you to
securely transmit data between parties as a self-contained JSON object whose payload can be verified as it is digitally
signed.
If you are looking for a simple but secure way to generate and verify JWT tokens in PHP—without the bloat—this library
is for you. If you need more advanced features like encryption (JWE), token refreshing, etc., then you may want to look
at something more comprehensive like [firebase/php-jwt](https://github.com/firebase/php-jwt).
## Installation
“`shell
composer require adamdburton/simple-jwt
“`
## Basic Usage
### Generate a Token (HS256)
“`php
use AdamDBurton\SimpleJWT\JWT;
$secret = ‘test-secret’; // Replace with your secret
$token = JWT::generateHS256([ ‘user_id’ => 123 ], $secret);
echo $token;
“`
### Verify a Token (HS256)
“`php
use AdamDBurton\SimpleJWT\JWT;
use AdamDBurton\SimpleJWT\Exceptions\InvalidToken;
try {
$secret = ‘test-secret’; // Replace with your secret
$payload = JWT::verifyHS256($token, $secret);
echo $payload->user_id;
} catch (InvalidToken $e) {
// Handle invalid token
}
“`
### Generate a Token (RS256)
“`php
use AdamDBurton\SimpleJWT\JWT;
$privateKey = file_get_contents(‘/path/to/private.key’); // Replace with your private key
$token = JWT::generateRS256([ ‘user_id’ => 123 ], $privateKey);
echo $token;
“`
### Verify a Token (RS256)
“`php
use AdamDBurton\SimpleJWT\JWT;
use AdamDBurton\SimpleJWT\Exceptions\InvalidToken;
try {
$publicKey = file_get_contents(‘/path/to/public.key’); // Replace with your public key
$payload = JWT::verifyRS256($token, $publicKey);
echo $payload->user_id;
} catch (InvalidToken $e) {
// Handle invalid token
}
“`
## Token Expiration (exp)
By default, tokens do not expire. To set an expiration timestamp, use the `exp` claim:
“`php
$payload = [
‘user_id’ => 123,
‘exp’ => time() + 3600 // Expires in 1 hour
];
“`
When verifying a token with an `exp` claim, the timestamp will be automatically checked against the current time. If the
token has expired, an `InvalidToken` exception will be thrown.
## Leeway Support
Sometimes clock skew between servers can cause tokens to appear expired when they are not. To account for this, you can
set a leeway (in seconds) when verifying a token:
“`php
// Allow a 60-second leeway for timestamp verification
$payload = JWT::verifyHS256($token, $secret, 60);
“`
## Testing
“`shell
composer test
“`
## License
MIT License. See the [LICENSE](LICENSE) file for details.