composer require attla/token
use Attla\Token\Factory as Token;
use Attla\Token\Facade as TokenFacade;
// create token on PHP projects
$token = Token::create();
// on laravel projects
$token = TokenFacade::create();
// or with global alias on laravel projects
$token = \Token::create();
// set a payload
$token->body('token value..');
// get the token value
$tokenEncoded = $token->get();
$token = Token::create()->secret('your secret phrase');
// changing the secret on exist instance
$token->secret('your secret phrase');
// secret aliases
$token->phrase('your secret phrase');
$token->passphrase('your secret phrase');
// Set token body type when it can be converted (array, stdClass, object)
$token->associative(); // set token payload as associative array
$token->asObject(); // set payload as stdClass object
// defines that it will always generate the same result
$token->same();
By default the secret
key is empty, but on laravel projects the default as env('APP_KEY')
or config('app.key')
When token body as string
, integer
, float
, bool
, and null
, it cant be converted to associative or object equivalent
Set the expiration
time in seconds after which the JWT MUST NOT be accepted for processing:
use Carbon\Carbon;
$time = strtotime('+1 hour');
$token->exp($time);
$token->expiration((new \DateTime())->setTimeStamp($time));
$token->expiresAt(Carbon::createFromTimestamp($time));
Set the time at which the JWT was issued (iat
):
use Carbon\Carbon;
$time = strtotime('-1 day');
$token->iat($time);
$token->issuedAt((new \DateTime())->setTimeStamp($time));
$token->issuedBefore(Carbon::createFromTimestamp($time));
Set the time before (nbf
) which the JWT MUST NOT be accepted for processing
use Carbon\Carbon;
$time = strtotime('+30 day');
$token->nbf($time);
$token->notBefore((new \DateTime())->setTimeStamp($time));
$token->canOnlyBeUsedAfter(Carbon::createFromTimestamp($time));
Set the audience
that the JWT is intended for:
$token->aud('https://example.com');
$token->audience('https://example.com', 'https://example.app');
$token->permittedFor(['https://example.net', 'https://example.org']);
Set the principal subject
of the JWT:
$token->relatedTo('exampl@e.com');
$token->sub('exampl@e.com');
Set the principal that issued (iss
) the JWT:
$token->issuedBy('https://example.com');
$token->iss('https://example.net');
Set the unique identifier (jti
) for the JWT:
$jti = hash('sha256', uniqid(mt_rand(), true));
$token->jti($jti);
$token->identifiedBy($jti);
Lock the token by browser
user agent:
// current browser
$token->bwr();
$token->broser();
// setup a user agent by string
$token->browser('Mozilla/5.0 (U; Linux x86_64; en-US) Gecko/20100101 Firefox/50.9');
Lock the token by ip
address:
// current request ip address
$token->ip();
// setup a ip address by string
$token->ip('1.1.1.1');
$token->ip('1.1.1.1', '2001:db8:0:0:0:0:2:1');
$token->ip(['1.1.1.1', '8.8.8.8']);
Lock the token by geographic coordinates (loc
):
// setup a location by coordinate string
$token->loc('-44.05964,77.10679,5');
// set a custom claim "uid"
$token->withClaim('uid', 1);
$token->with('uid', 1); // alias
// on parse validate using:
$token->with('uid', 1);
All claim values as inserted on token header, to be retrieved on body use:
// insert the payload as array or object
$token->payload(['uid' => 1]);
// on parse validate use:
$token->with('uid', 1);
Verifying if a value is present on token:
$hasUid = $token->has('uid'); // isset(uid)
$hasUidWithValue = $token->has('uid', 1); // isset(uid) && uid === 1
$tokenValue = Token::parse($tokenEncoded)
->associative()
->get();
// Creating
$token = Token::create()
->secret('your secret phrase') // secret key
->iss($_SERVER['HTTP_HOST']) // Set 'issuer' claim
->aud('e.com', $_SERVER['HTTP_HOST']) // Set 'audience' claim
->sub('7urkg6uDkMISjZBuFGdeySokAIrSuWAB') // Set 'subject' claim
->iat(time()) // Set 'issued' date in seconds
->exp(7200) // Set 'expiration' in seconds (2 hours)
->bwr() // Lock the token by user agent of browser
->ip() // Lock the token with IP (v6 or v4)
->payload([ // Set the token payload
'name' => 'Acme LLC',
'email' => 'acme@e.com',
]);
// Get the token
$tokenEncoded = $token->get();
echo $tokenEncoded . PHP_EOL;
$tokenParse = Token::parse($tokenEncoded)
->iss($_SERVER['HTTP_HOST']) // Set the issuer claim for validate
->validAt(time() - 3600) // Rewrites the current date for 'exp', 'iat', 'nbf' validations
->associative();
if ($tokenParse->isValid()) {
echo 'Subject: '. $tokenParse->sub() . PHP_EOL;
echo 'Audience: '. implode(',', $tokenParse->audience()) . PHP_EOL;
echo $tokenParse->get() . PHP_EOL;
} else {
echo "Token as invalid!" . PHP_EOL;
}
This package is licensed under the MIT license © Zunq.