maize-tech/laravel-magic-login
Laravel Magic Login adds passwordless authentication to your Laravel app using temporary signed magic links sent by email. Users log in with one click, no password required, with configurable expiry and easy customization.
Architecture fit — maize-tech/laravel-magic-login implements passwordless authentication via signed, time-limited URLs delivered by Laravel's notification system, backed by a custom guard. It is a thin, framework-native package: no external IdP, no hosted service, no new infrastructure. That is attractive for internal admin tools, low-friction onboarding flows, and as a step-up or fallback auth path alongside password/SSO. It is not a replacement for MFA-protected primary auth on customer-facing accounts without additional controls (device binding, single-use enforcement, rate limiting).
Integration feasibility — Standard Composer install with config publishing and a MagicLogin trait applied to the authenticatable model. Effort is low-to-moderate and concentrated in: notification channel/delivery choice, route protection and TTL tuning, and hardening (single-use token consumption, invalidation on password/email change, audit logging). Because it extends Laravel's auth primitives rather than replacing them, it can be introduced for one route or user cohort without a broader auth migration.
Technical risk — This is authentication-adjacent code, so risk is asymmetric: a defect is a security incident, not a bug. Primary exposures are (a) small-maintainer/single-vendor concentration and release cadence, (b) security review debt — we have no evidence of a third-party audit, and (c) constraint-widening releases silently changing resolved framework versions in CI and production. Release 2.4.0 is a maintenance release: three Dependabot bumps to GitHub Actions (git-auto-commit-action 5→6, laravel-pint-action 2.5→2.6, fetch-metadata 2.4.0→2.5.0) and Laravel 13 support. No new features, no deprecations, no security fixes. The version-6 bump of git-auto-commit-action is a CI-only change with no runtime effect; fetch-metadata and laravel-pint-action bumps are likewise pipeline-scoped.
Key questions — (1) Does 2.4.0 widen the illuminate/* constraint to include 13, or replace older bounds — i.e. do we lose Laravel 10/11/12 support when upgrading? (2) What is the minimum PHP version implied by Laravel 13, and does that exceed our fleet's floor? (3) Is Laravel 13 covered in the package's CI matrix, or is support asserted without a green build? (4) Does the signed-URL TTL default or token-consumption behavior differ from 2.3.0? (5) Are magic links single-use and revocable today, or does that require our own implementation? (6) What is the maintainer's responsiveness history on security reports?
Stack fit — Native fit for any Laravel application already using notifications (mail/SMS/Slack) and the default auth guards. Requires no new services, secrets, or vendor contracts. Conflicts only arise if we run a non-Laravel auth layer or a strict "no community auth packages" policy.
Migration path — Additive and reversible. Install alongside existing auth, expose a single opt-in route, gate it behind a feature flag per user cohort, and keep password/SSO paths untouched. Rollback is a config/route removal — no schema or data migration that traps us, provided we confirm whether 2.4.0 ships a migration and how it behaves on rollback.
Compatibility — Pin explicitly and verify rather than trusting the minor bump. Confirm the resolved Laravel/PHP matrix in a staging build, run the package's own test suite against our framework version, and check that our existing auth tests still pass. Treat 2.4.0 as "Laravel 13 readiness" rather than an upgrade driver — adopt it only when we ourselves move to Laravel 13, or when a security fix lands.
Sequencing — (1) Security review of the signed-URL and token lifecycle code paths, plus our hardening layer. (2) Internal-only pilot on a non-critical admin surface with audit logging. (3) Pin to 2.4.0 in the pilot, confirm lockfile diff is limited to constraint widening. (4) Decide on Laravel 13 adoption independently; re-evaluate the package then. (5) Only after a clean pilot quarter, consider customer-facing or step-up use.
Maintenance — Low ongoing cost: the package tracks Laravel's release cadence and depends on framework internals rather than bespoke code. The real maintenance burden is ours — notification templates, TTL policy, and abuse controls — plus a quarterly review of upstream activity given the small maintainer base.
Support — Community-supported open source with no vendor SLA. Escalation path on an auth outage is "fork and patch," which is viable at this codebase size but should be an explicit, pre-agreed contingency rather than a discovery during an incident. Budget a named internal owner.
Scaling — Negligible infrastructure footprint: one notification job and one verification request per login attempt. Cost scales with mail/SMS volume, not with user count, and SMS is the only meaningful variable cost. Rate limiting on the request endpoint is mandatory to prevent notification-cost abuse and enumeration.
Failure modes — Highest-impact: link replay or leakage via email forwarding/shared inboxes; token validity surviving a password reset or account disable; delivery failure locking users out with no fallback; and clock skew or proxy URL rewriting breaking signature validation. Each needs a documented mitigation (single-use enforcement, invalidation hooks, retained password/SSO fallback, APP_URL/proxy header discipline) and a monitoring signal.
Ramp-up — One engineer can integrate and harden a pilot in roughly one to two weeks, most of it spent on security review and abuse controls rather than the package itself. Documentation is the package README; expect to write our own runbook for token invalidation, key rotation, and delivery-failure triage.
How can I help you explore Laravel packages today?