PHPackages                             aliarefavin/avinauthpackage - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. aliarefavin/avinauthpackage

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

aliarefavin/avinauthpackage
===========================

Custom authentication system for Laravel

1.1.1(9mo ago)19051MITPHPPHP ^8.0|^8.1|^8.2|^8.3

Since Apr 7Pushed 9mo ago1 watchersCompare

[ Source](https://github.com/aliarefavin/avinauthpackage)[ Packagist](https://packagist.org/packages/aliarefavin/avinauthpackage)[ Docs](https://github.com/aliarefavin/avinauthpackage)[ RSS](/packages/aliarefavin-avinauthpackage/feed)WikiDiscussions master Synced today

READMEChangelogDependencies (8)Versions (13)Used By (0)

AvinAuth OTP Verification (Redis / Database)
============================================

[](#avinauth-otp-verification-redis--database)

 A lightweight and customizable Laravel package for verifying mobile/email using one-time passwords (OTP) on Redis.

🔐 Secure &amp; Simple • 📦 Easily Integrates with Laravel • ✉️ SMS/Email Ready

Verify your user mobile/email with a one-time password using both `Redis` and `Mysql Database`.

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require aliarefavin/avinauthpackage
```

```
php artisan migrate
```

Publish config file using:

```
php artisan vendor:publish --tag=avinauth-config
```

Configuration
-------------

[](#configuration)

Configuration is located at config/avinauthconfig.php. Here's what you can adjust:

`connection`: you can set your connection to redis or database as you wish

> Note: The default connection is `redis` and we recommend to keep it that way specially for large scale projects. If you are not using redis on your project and want to use `database` connection make sure to run `php artisan migrate` after installing the package.

`code`: OTP code generation rules.

`resend_delay` : Time delay (in seconds) before allowing another resend.

`max_attemps`: Maximum verification attempts allowed.

`max_resends`: Total resends allowed in one hour.

Usage
-----

[](#usage)

### Send code to the user

[](#send-code-to-the-user)

```
use AliArefAvin\AvinAuthPackage\Services\AvinAuthService;

$result = (new AvinAuthService())->sendOTP($mobile, $request, $class);
        // Check if the request was successful
        if ($result['success'] && !array_key_exists('seconds', $result)) {
            // If the request was successful and the 'seconds' key is not present in the result,
            // set the 'seconds' key to the configured resend delay time
            $result['seconds'] = config('avinauthconfig.resend_delay');
        }
        // Return the result array, which contains information about the request status
        return $result;
```

`$class` is your class that implements `AliArefAvin\AvinAuthPackage\Contracts\AvinAuthInterface`

this `$class` contains your custom function named `send` that you use to send the code for users `(email|sms)` for exmaple your `$class` will be `new AuthenticateService()`

```
namespace App\Services\Auth;

use AliArefAvin\AvinAuthPackage\Contracts\AvinAuthInterface;

class AuthenticateService implements AvinAuthInterface
{
    public function send(string $receiver, string $code)
    {
        try {
            $Message = 'کد ورود شما:' . PHP_EOL .
                "code: $code" . PHP_EOL ;
                // If the receiver is not in the list of test numbers, send the SMS notification
                Notification::route(NotifyType::TSMS, []) // Set the notification route for SMS
                ->notify(
                    new SendSmsNotification( // Create a new SMS notification
                        $receiver, // The receiver's mobile number
                        $Message // The message content
                    )
                );
            return true; // Return true if the message was sent successfully
        } catch (Exception $e) {
            // If there is an exception (e.g., sending fails), return false
            return false; // Indicate that sending the code failed
        }
    }
}
```

### Verify

[](#verify)

You can verify code with request validation.

```
$request->validate([
    'mobile' => ['required'],
    'code' => 'required|avin_verify:mobile',
]);
```

> `mobile` is your receiver which in this case is mobile.

> Note: You can verify a code just once. so if you need to check code in two different requests then you should use something like the session to handle that.

Credits &amp; Inspiration 🙌
---------------------------

[](#credits--inspiration-)

- This package is heavily inspired by the excellent work of the [Sanjab Verify package](https://github.com/sanjabteam/verify). Special thanks to the Sanjab team for their elegant design and contribution to the Laravel ecosystem.

Contributing 🛠️
---------------

[](#contributing-️)

Contributions are welcome!

- Fork the Project
- Create a new branch
- Add your changes
- Submit a pull request 🙌

License 📝
---------

[](#license-)

This project is open-sourced under the MIT license.

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance58

Moderate activity, may be stable

Popularity19

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 93.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~16 days

Recently: every ~44 days

Total

12

Last Release

276d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/178640639?v=4)[aliarefavin](/maintainers/aliarefavin)[@aliarefavin](https://github.com/aliarefavin)

---

Top Contributors

[![aliarefavin](https://avatars.githubusercontent.com/u/178640639?v=4)](https://github.com/aliarefavin "aliarefavin (14 commits)")[![AliArefzadeh](https://avatars.githubusercontent.com/u/130400679?v=4)](https://github.com/AliArefzadeh "AliArefzadeh (1 commits)")

---

Tags

laravelvalidationauthAuthenticationverifyauthenticateverificationone-time-passwordlaravel toolsoptavinavinmediaavintechaliaref

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/aliarefavin-avinauthpackage/health.svg)

```
[![Health](https://phpackages.com/badges/aliarefavin-avinauthpackage/health.svg)](https://phpackages.com/packages/aliarefavin-avinauthpackage)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3355.3M346](/packages/psalm-plugin-laravel)[api-platform/laravel

API Platform support for Laravel

58171.4k14](/packages/api-platform-laravel)[spatie/laravel-permission

Permission handling for Laravel 12 and up

12.9k102.4M1.4k](/packages/spatie-laravel-permission)[laravel/ai

The official AI SDK for Laravel.

1.0k3.2M194](/packages/laravel-ai)[pressbooks/pressbooks

Pressbooks is an open source book publishing tool built on a WordPress multisite platform. Pressbooks outputs books in multiple formats, including PDF, EPUB, web, and a variety of XML flavours, using a theming/templating system, driven by CSS.

45444.2k1](/packages/pressbooks-pressbooks)[yajra/laravel-oci8

Oracle DB driver for Laravel via OCI8

8793.2M25](/packages/yajra-laravel-oci8)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
