laravel-notification-channels/authy
Send Authy push notifications and verification codes from Laravel. This channel integrates Twilio Authy with Laravel's notification system, letting you deliver one-time passwords and approval requests through a simple notification class.
toAuthy() method on any notifiable model, so "gate login behind two-factor" or "step-up verification before payout changes" becomes a sprint-sized deliverable rather than a quarter-long identity program. That difference matters when a security review or an enterprise deal has a date attached.Notification::fake() in tests. Shorter path to a working demo for a security questionnaire, and cheaper to test than bespoke HTTP calls.Adopt when:
composer.json still supports, verified against the last commit date rather than assumed.database channel), so security logging and user communication are already solved.Look elsewhere when:
pragmarx/google2fa) first.PM diligence before committing: confirm Laravel/PHP compatibility and issue-tracker activity; read Twilio's current Authy EOL and Verify migration guidance and put the date on the roadmap at adoption time; check whether the package depends on twilio/sdk and whether that pin conflicts with your existing SDK; model per-verification pricing and set a spend cap; and confirm the channel routes by Authy ID, not phone number — meaning user provisioning and backfill is a migration project, not a config change.
For executives: This is a small, free (MIT-licensed) connector that lets us add SMS, voice, and push identity verification in roughly a sprint instead of a quarter, with no new infrastructure and no license cost. It is the fastest credible path to closing the security finding / unblocking the enterprise deal that has a date on it. Two caveats to say out loud: the underlying Authy API is on a published deprecation path toward Twilio Verify, so this is a tactical bridge rather than a ten-year foundation — and the package sends codes but does not validate them, so we are funding the verification logic, rate limiting, and provisioning work alongside it. Both are scoped, both are in the same plan; the ask is to fund the bridge and the migration together rather than discover the migration later.
For engineering: You get a thin, readable delivery adapter — essentially one channel class and a message builder on top of Laravel's native notification system. You inherit queueing, Notification::fake(), and your existing audit path for free. The real work is explicitly yours and should be designed behind a VerificationService interface from day one: challenge validation against the Authy check endpoint, RateLimiter on attempts, fallback factors (email OTP or TOTP) for users with null or stale Authy IDs, provisioning plus backfill for the existing user base, and one integration test or scheduled smoke check that actually hits the sandbox — because Notification::fake() will happily hide a broken API key. Three gotchas to design around: exceptions propagate out of notify() onto the login request path, queued retries re-send real billable tokens (set $tries = 1), and the channel returns an Authy ID rather than a phone number — returning the phone is the single most common integration bug.
For security and finance: Verification-side logic, attempt caps, and session state are not in the package — they are ours, and they are the difference between MFA and an open verification oracle. Plan for a per-user rate limit (e.g. 5 attempts / 10 minutes), geo/IP velocity rules, and spend alerting on the Twilio account, because a leaky trigger endpoint with no cap is a direct billing incident. Pricing is per-verification and channel-dependent: push is effectively free, SMS is modest, voice is materially more expensive — which is also the argument for push-first routing as a cost decision, not just a UX one.
One-line framing for the roadmap review: we are buying Twilio/Authy as the vendor and borrowing this MIT adapter as a replaceable seam — so review the vendor contract, pricing, and EOL date hard, treat the package as frozen and forkable, and hold the VerificationService interface as the point where we swap to Twilio Verify in an afternoon when the time comes.
How can I help you explore Laravel packages today?