Git Product home page Git Product logo

laravel-otp's Introduction

Laravel OTP โ–ฒ

Latest Stable Version Total Downloads License

Introduction ๐Ÿ––

This is a simple package to generate and validate OTPs (One Time Passwords). This can be implemented mostly in Authentication.

Installation ๐Ÿ’ฝ

Install via composer

composer require ichtrojan/laravel-otp

Run Migrations

php artisan migrate

Usage ๐Ÿงจ

NOTE
Response are returned as objects. You can access its attributes with the arrow operator (->)

Generate OTP

<?php

use Ichtrojan\Otp\Otp;

(new Otp)->generate(string $identifier, string $type, int $length = 4, int $validity = 10);
  • $identifier: The identity that will be tied to the OTP.
  • $type: The type of token to be generated, supported types are numeric and alpha_numeric
  • $length (optional | default = 4): The length of token to be generated.
  • $validity (optional | default = 10): The validity period of the OTP in minutes.

Sample

<?php

use Ichtrojan\Otp\Otp;

(new Otp)->generate('[email protected]', 'numeric', 6, 15);

This will generate a six digit OTP that will be valid for 15 minutes and the success response will be:

{
  "status": true,
  "token": "282581",
  "message": "OTP generated"
}

Validate OTP

<?php

use Ichtrojan\Otp\Otp;

(new Otp)->validate(string $identifier, string $token)
  • $identifier: The identity that is tied to the OTP.
  • $token: The token tied to the identity.

Sample

<?php

use Ichtrojan\Otp\Otp;

(new Otp)->validate('[email protected]', '282581');

Responses

On Success

{
  "status": true,
  "message": "OTP is valid"
}

Does not exist

{
  "status": false,
  "message": "OTP does not exist"
}

Not Valid*

{
  "status": false,
  "message": "OTP is not valid"
}

Expired

{
  "status": false,
  "message": "OTP Expired"
}

Delete expired tokens

You can delete expired tokens by running the following artisan command:

php artisan otp:clean

You can also add this artisan command to app/Console/Kernel.php to automatically clean on scheduled

<?php

protected function schedule(Schedule $schedule)
{
    $schedule->command('otp:clean')->daily();
}

Contribution

If you find an issue with this package or you have any suggestion please help out. I am not perfect.

laravel-otp's People

Contributors

bkd27 avatar codelikesuraj avatar developersunesis avatar dimyatiutoyo avatar fisayoafolayan avatar ichtrojan avatar lhamycodes avatar paulayuk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

laravel-otp's Issues

Issue in validate function

I think there is issue in validate() function,
It has token in where condition which results in always same error "OTP does not exist"

I have made some changes to fix this, please check the diff below.

https://www.diffchecker.com/kKWDS6kn/

If everything looks okay, I'll create a PR for this fix.

multiple issues

hi, thanks for creating this simple OTP package. However, several issues are observed

  • improper use of Laravel Facade
    see issue #11
  • otp:clean command doesn't take in tokens that is expired but never validated before

looking at how multiple PRs with improvements are closed without any comments, are you open for PR?

Laravel 9 Support

Hi there @ichtrojan

I'd like to know if this package supports Laravel 9?

I try to follow the installation step, but the package seems not discoverable.

I find a number of alternative OTP packages, but I think yours is the simple one that I need.

Using $this when not in object context

[2021-12-04 09:11:13] local.ERROR: Using $this when not in object context {"exception":"[object] (Error(code: 0): Using $this when not in object context at /Users/mac/Documents/programming/laravel/morebitcoin/vendor/ichtrojan/laravel-otp/src/Otp.php:29) [stacktrace] #0 /Users/mac/Documents/programming/laravel/morebitcoin/app/Http/Controllers/AuthController.php(47): Ichtrojan\\Otp\\Otp::generate('ishoshot@gmail....', 6, 15) #1 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Http\\Controllers\\AuthController->register(Object(Illuminate\\Http\\Request)) #2 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('register', Array) #3 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(App\\Http\\Controllers\\AuthController), 'register') #4 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController() #5 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Routing/Router.php(695): Illuminate\\Routing\\Route->run() #6 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request)) #7 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #8 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #9 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(127): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #10 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(103): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest(Object(Illuminate\\Http\\Request), Object(Closure), Array) #11 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(55): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequestUsingNamedLimiter(Object(Illuminate\\Http\\Request), Object(Closure), 'api', Object(Closure)) #12 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle(Object(Illuminate\\Http\\Request), Object(Closure), 'api') #13 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #14 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Routing/Router.php(697): Illuminate\\Pipeline\\Pipeline->then(Object(Closure)) #15 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Routing/Router.php(672): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request)) #16 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Routing/Router.php(636): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route)) #17 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Routing/Router.php(625): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request)) #18 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request)) #19 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request)) #20 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #21 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #22 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #23 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #24 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #25 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #26 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #27 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #28 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #29 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #30 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/fruitcake/laravel-cors/src/HandleCors.php(52): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #31 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #32 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #33 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Http\\Middleware\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure)) #34 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request)) #35 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\\Pipeline\\Pipeline->then(Object(Closure)) #36 /Users/mac/Documents/programming/laravel/morebitcoin/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request)) #37 /Users/mac/Documents/programming/laravel/morebitcoin/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request)) #38 /Users/mac/.composer/vendor/laravel/valet/server.php(235): require('/Users/mac/Docu...') #39 {main} "}

Error: Using $this when not in object context

Hello,
When I'm trying to generate the OTP using this method
Ichtrojan\Otp\Otp::generate($email, 6, 15);
I'm getting this error
Error: Using $this when not in object context in file /vendor/ichtrojan/laravel-otp/src/Otp.php on line 29

Error when trying to validate OTP

"Carbon\\Carbon::rawAddUnit(): Argument #3 ($value) must be of type int|float, string given, called in /home/gizfvegg/api.droxnet.com/vendor/nesbot/carbon/src/Carbon/Traits/Units.php on line 356"

I'm getting this error message when I'm trying to use validate method:
(new Otp)->validate($user->email, $request->token);

Using Laravel 11.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.