itsmeabde / easy-otp
Easy OTP (Onetime Password) for Laravel 7|8
v1.0.0
2021-10-18 11:52 UTC
Requires
- php: ^7.2.5|^8
README
Easy OTP is laravel package for create simple onetime password system
Support Laravel Version 7|8
Install
Via composer
$ composer require itsmeabde/easy-otp
Finally, you will want to publish the config using the following command:
$ php artisan vendor:publish --tag=otp
$ php artisan migrate
Usage
use App\Http\Controllers\Controller;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Validation\ValidationException;
use Itsmeabde\EasyOtp\Exceptions\OtpException;
use Itsmeabde\EasyOtp\Otp;
class OtpController extends Controller
{
public $otp;
public function __construct(Otp $otp)
{
$this->otp = $otp;
}
public function create(Request $request): JsonResponse
{
$request->validate([
'name' => 'required|string|min:3|max:100',
'email' => 'required|email'
]);
$identifier = sha1($request->input('email'));
[$identifier, $pin, $expiresIn] = $this->otp->generate(
$identifier,
function ($identifier, $pin, $expiresIn) {
// Send notification to users
});
return response()->json(
compact('identifier', 'expiresIn')
);
}
public function verify(Request $request): JsonResponse
{
$request->validate([
'identifier' => 'required|string',
'pin' => 'required|numeric'
]);
try {
$this->otp->validate(
$request->input('identifier'),
$request->input('pin'),
function ($identifier) {
// Send notification to users
});
} catch (OtpException $e) {
throw ValidationException::withMessages(
$e->getMessageBag()
);
}
return response()->json([
'message' => 'Successfully verified.'
]);
}
public function resend(Request $request): JsonResponse
{
$request->validate(['identifier' => 'required|string']);
try {
[$identifier, $pin, $expiresIn] = $this->otp->generate(
$request->input('identifier'),
function ($identifier, $pin, $expiresIn) {
// Resend notification to users
}, $requestExtraTime = true);
} catch (OtpException $e) {
throw ValidationException::withMessages(
$e->getMessageBag()
);
}
return response()->json([
'message' => 'Successfully resend.',
]);
}
}
License
The MIT License (MIT). Please see License File for more information.