shetabit / token-builder
Laravel Token Builder
Installs: 5 249
Dependents: 0
Suggesters: 0
Security: 0
Stars: 19
Watchers: 3
Forks: 11
Open Issues: 2
Requires
- php: >=7.2
- illuminate/support: ^5.8|6.*|7.*|8.*|9.*|10.*
Requires (Dev)
- orchestra/testbench: ^4.4
- phpunit/phpunit: ^8.4
- squizlabs/php_codesniffer: ^3.5
README
Laravel Token Builder
This package can generate random tokens which can expires.
Generated token can be used for creating one-time links, or authentication with sms pin and etc.
we have 2 things that can expire genereted tokens:
- time limit : for example a token can be expired after 2022/05/12
- usage limit : for example a token can be expired after using it more than 3 times.
Donate me if you like this package 😎
List of contents
- Available drivers
- Install
- Configure
- How to use
- Change log
- Contributing
- Security
- Credits
- License
Install
Via Composer
$ composer require shetabit/token-builder
Configure
If you are using Laravel 5.5
or higher then you don't need to add the provider and alias.
In your config/app.php
file add these two lines.
# In your providers array. 'providers' => [ ... Shetabit\TokenBuilder\Provider\TokenBuilderServiceProvider::class, ], # In your aliases array. 'aliases' => [ ... 'TokenBuilder' => Shetabit\TokenBuilder\Facade\TokenBuilder::class, ],
then, run the below commands to publish migrations and create tables
php artisan vendor:publish php artisan migrate
How to use
you can use TokenBuilder
facade or Builder
class to build tokens.
Generating tokens
In your code, use facade like the below :
use Shetabit\TokenBuilder\Facade\TokenBuilder; // ... $tokenObject = $token = TokenBuilder::build();
you can also use Builder
:
use Shetabit\TokenBuilder\Builder; // ... $builder = new Builder; $tokenObject = $builder->build();
each tokenObject has a unique value that can be used to recognize it from others and we call it token
.
you can access to tokenObject unique token using token
, see below example:
use Shetabit\TokenBuilder\Facade\TokenBuilder; // ... // generate and store token in database $tokenObject = $token = TokenBuilder::build(); // show token unique value echo $tokenObject->token;
you can retrieve token and send it to users via email or sms or using it in URLs. it can be used to sms verifications or one-time login pins , etc.
Adding expiration date
you can build a token with auto expiration date. this kind of token will be expired after the specified date.
use Shetabit\TokenBuilder\Facade\TokenBuilder; // ... // will be expired after 5 minutes $date = Carbon::now()->addMinutes(5); $tokenObject = TokenBuilder::setExpireDate($date)->build(); echo $tokenObject->token; // show unique token echo $tokenObject->expired_at; // show expiration datetime if ($tokenObject->hasExpired()) { echo 'token has expired'; }
Adding usage limit
you can add usage limit into your tokens. a token will be invalid after the usage has exceeded the limit.
use Shetabit\TokenBuilder\Facade\TokenBuilder; // ... // will be expired after 1 usage. $tokenObject = TokenBuilder::setUsageLimit(1)->build(); // use token --> increment the usage counter $tokenObject->use(); echo $tokenObject->token; // show unique token echo $tokenObject->usage_count; // show total usages count echo $tokenObject->max_usage_limit; // show max usage limit // determine if user has used if ($tokenObject->hasUsed()) { echo 'token has used'; } // determin if token has exceed max usage if ($tokenObject->hasExceedMaxUsage()) { echo 'token used has exceeded the specified limit'; }
Validation
you can validate a token using isValid
method.
a token is valid if has not exceeded the specified limit and has not expired yet.
use Shetabit\TokenBuilder\Facade\TokenBuilder; // ... $date = Carbon::now()->addMinutes(5); // will be expired after 5 minutes $usageLimit = 1; // max usages $token = TokenBuilder::setExpireDate($date)->setUsageLimit($usageLimit)->build(); if ($token->isValid()) { echo 'token is valid'; $token->use(); // use token (increament usage counter) } else { echo 'token is not valid any more!'; }
you can use a token by running use
method.
you can expire a token by running markAsExpired
method. (this method will update expiration date to current date).
Add relations
you can add a relation to tokens. this can be done in 2 different ways:
use Shetabit\TokenBuilder\Facade\TokenBuilder; use App\User; $user = User::first(); /** * first example: using TokenBuilder **/ $tokenObject = TokenBuilder::setRelatedItem($user)->build(); /** * second example: using a main model **/ $tokenObject = $user->temporaryTokenBuilder()->build(); // you can access to token's relation using the tokenable dd($tokenObject->tokenable); if ($tokenObject->tokenable) { echo $tokenObject->tokenable->email; }
Attach custom data
you can attach custom data into your token. this data will be stored in json format.
use Shetabit\TokenBuilder\Facade\TokenBuilder; /** * first example: using TokenBuilder **/ $data = [ 'mobile' => '9373620353', 'name' => 'John Doe', ]; $tokenObject = TokenBuilder::setData($data)->build(); echo $tokenObject->data['mobile'];
Retrieve tokens
you can retrieve tokenObject
using token's unique string
$token = 22325651; // your unique token // retrieve token object $tokenObject = TokenBuilder::setUniqueId($token)->findToken(); // retrieve token object if it is valid $tokenObject = TokenBuilder::setUniqueId($token)->findValidToken(); // retrieve token object using its relation $tokenObject = $user->temporaryTokenBuilder()->setUniqueId($token)->findToken(); // retrieve token object if it is valid using its relation $tokenObject = $user->temporaryTokenBuilder()->setUniqueId($token)->findValidToken();
TokenBuilder reference
This is a reference for TokenBuilder methods.
TokenBuilder
creates a tokenObject (instance of eloquent Token
model) if you run build method and searches into data base using findToken
and findValidToken
.
-
setUniqueId
-
you can build tokens with your custom algoritm and use it as unique id.
$token = 'jgaZ1z9'; $tokenObject = TokenBuilder::setUniqueId($token)->build(); echo $tokenObject->token; // jgaZ1z9
-
getUniqueId
-
returns your custom unique id (if not exists, returns
null
). -
setData
-
you can attach some data into tokens and retrieve them later.
-
getData
returns attached data.
-
setExpireDate
sets an expiration date.
-
getExpireDate
retrieves expiration date.
-
setUsageLimit
sets usage limit.
-
getUsageLimit
retrieves usage limit.
-
setType
sets token type. you can set type for your tokens. its like a scope for your tokens.
-
getType
retrieves token type.
-
setRelatedItem
add a relation to token.
-
getRelatedItem
retrieve current relation.
-
build
generate a token.
-
findToken
find token (being valid or not valid is not important) and return
null
if not exists. -
findValidToken
find token if it is valid and return
null
if not exists.
Token Reference
-
use
add 1 to usage counter. (usageCounter = usageCounter + 1)
-
hasUsed
determine is current token has used and returns a boolean result.
-
hasMaxUsageLimit
determine if current token max usage is limited and returns a boolean result.
-
hasExpired
determine if current token has expired or not.
-
markAsExpired
mark current token as expired.
notice: this method updates
expired_at
field to current time (now). -
isValid
determines if current token is valid (must not be expired and must not be exceeded max usage limit).
-
tokenable
returns the token relation if there is any relation, and returns null if no relation exists.
Change log
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING and CONDUCT for details.
Security
If you discover any security related issues, please email khanzadimahdi@gmail.com instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.