ivansotelo / twilio-verify

Verify Phone Numbers in a Laravel PHP Application with Twilio Verify



Build Status Total Downloads Latest Stable Version License


TwilioVerify makes it easier and safer than custom verification systems to verify a user’s phone number. It ensures that the phone number is valid by sending a short code via SMS to the number during registration. This can help reduce the number of fake accounts created and failure rates when sending SMS notifications to users.

This package use Twilio notifications channel.



You can install the package via composer:

composer require ivansotelo/twilio-verify

In app/config/app.php add the following :



Add your Twilio Account SID, Auth Token, and From Number (optional) to your .env:

TWILIO_USERNAME=XYZ # optional when using auth token
TWILIO_PASSWORD=ZYX # optional when using auth token
TWILIO_AUTH_TOKEN=ABCD # optional when using username and password
TWILIO_ACCOUNT_SID=1234 # always required
TWILIO_FROM=100000000 # otional default from
TWILIO_DEBUG_TO=23423423423 # Set a number that call calls/messages should be routed to for debugging

Advanced configuration

Run php artisan vendor:publish --provider="IvanSotelo\TwilioVerify\TwilioVerifyServiceProvider" --tag=config


To run the migrations from this package use the following command:

php artisan migrate --path="/vendor/ivansotelo/twilio-verify/database/migrations"

The package by default use the App\User:class to get the table name.

To customize the migration, publish it with the following command:

php artisan vendor:publish --provider="IvanSotelo\TwilioVerify\TwilioVerifyServiceProvider" --tag="migrations"

Twilio Verify assumes your MustVerifyPhone trait will be the App\User class that ships with Laravel. If you wish to change this you can specify a different model in your .env file:



Add the MustVerifyPhone trait to your model definition. This trait provides various methods to allow you to send verification phone code.

use IvanSotelo\TwilioVerify\Traits\MustVerifyPhone;
use IvanSotelo\TwilioVerify\Contracts\MustVerifyPhoneContract;

class User extends Authenticatable implements MustVerifyPhoneContract
    use MustVerifyPhone, Notifiable;

     * Route notifications for the Twilio channel.
     * @param  \Illuminate\Notifications\Notification  $notification
     * @return string
    public function routeNotificationForTwilio()
        return $this->phone_number;


On EventServiceProvider attach SendPhoneVerificationNotification to the Illuminate\Auth\Events\Registered event:

namespace App\Providers;

use Illuminate\Support\Facades\Event;
use Illuminate\Auth\Events\Verified;
use Illuminate\Auth\Events\Registered;
use IvanSotelo\TwilioVerify\Listeners\SendPhoneVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
     * The event listener mappings for the application.
     * @var array
    protected $listen = [
        Registered::class => [
        Verified::class => [
            // You can attach some listener

To register the default middleware add the following lines to the $routeMiddleware array within the app/Http/Kernel.php file:

protected $routeMiddleware = [
    // …
    'isVerified' => \IvanSotelo\TwilioVerify\Http\Middleware\EnsurePhoneIsVerified::class,

Apply the middleware on your routes:

Route::group(['middleware' => ['isVerified']], function () {
    // …

By default this packages ships with two routes.

Route::get('phone/verify/{code}', '[email protected]')->name('verification.verify');
Route::post('phone/resend', '[email protected]')->name('verification.resend');

To customize the translations you may publish the files to your resources/lang/vendor folder using the following command:

php artisan vendor:publish --provider="IvanSotelo\TwilioVerify\TwilioVerifyServiceProvider" --tag="translations"


TwilioVerify is open-sourced software licensed under the MIT license.