Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filament Password Expiry Laravel Package

eightynine/filament-password-expiry

Filament plugin that enforces password expiry in your Laravel admin panel. Define a maximum password age, prompt users to update expired passwords after a set number of days, and redirect them to a secure change-password screen.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package targets the Filament v3/v4 plugin surface for Laravel — a service provider plus a Plugin contract implementation, with enforcement typically delivered through middleware and/or an authenticated-panel hook that inspects the age of the user's current password. That aligns cleanly with Laravel's existing credential lifecycle (Fortify/Breeze/Jetstream all write password changes through the same model events), so the integration point is well understood and low-surface. The concern is not architectural: it is that the package encodes a policy — forced periodic rotation — that NIST SP 800-63B and NCSC guidance explicitly discourage absent evidence of compromise. Architecture fit is high; product fit is conditional on a compliance driver, not a security-best-practice driver.

Integration feasibility. Low-to-moderate effort. Expected work: publish config, add a password_changed_at (or configurable equivalent) column and backfill it, register the plugin on each relevant panel provider, and confirm middleware ordering relative to Filament's Authenticate stack. Multi-panel installs (admin + customer) each need explicit registration, which is easy to miss.

Technical risk.

  • Unproven adoption signal. 0 stars, 0 dependents, score 0 means no observable production usage and no community validation. The vendor (eightynine) has a credible Filament plugin track record, which partially offsets this, but you are an early adopter.
  • Policy risk dominates technical risk. Committing to expiry creates a recurring user-facing friction event and a permanent support load; reversing the policy later requires another migration.
  • Version coupling. Enforcement behavior is tightly bound to Filament's auth/middleware internals, which are the most churn-prone part of Filament's major releases.
  • Lockout blast radius. Any bug in the "is expired" evaluation can lock an entire user base out of the panel, including administrators.

Key questions for the vendor/author.

  1. Which Filament majors and Laravel versions are in the tested matrix, and is there CI against the current stable?
  2. How is password age determined — dedicated column, updated_at, or configurable resolver? Is a null/legacy value treated as expired or as fresh?
  3. Does enforcement apply to all panels, specific panels, or per-guard? Can it be scoped to a subset of users/roles?
  4. How are non-password identities handled (SSO/SAML/OAuth users, API-token-only accounts, service accounts, impersonation sessions)?
  5. Is there an exempt-role or break-glass mechanism for administrators?
  6. What is the redirect/loop-protection behavior, and is there a configurable grace period and pre-expiry warning notification?
  7. Support and release cadence commitments — is this a maintained product or a one-off?

Integration Approach

Stack fit. Native to the TALL stack: Laravel + Livewire + Filament. No new infrastructure, no external service, no queue dependency required for core enforcement. This is the package's strongest attribute — it introduces zero new runtime components.

Migration path.

  1. Add the password-age column via a reversible migration; backfill existing rows to a deliberate value (not null) so legacy users are not treated as instantly expired.
  2. Publish and review config; set expiry window and exempt roles.
  3. Register the plugin per panel provider, starting with a non-critical panel.
  4. Deploy in observe-only/warn mode first if the package supports it; otherwise gate enforcement behind a feature flag at the app level.
  5. Enable enforcement for a pilot cohort, then globally.

Compatibility checks. Filament v3 vs v4 is the primary axis — verify the constraint in composer.json matches your installed major before scoping. Confirm interaction with your auth stack (Fortify/Breeze/Jetstream), any existing password-reset customization, and any custom Filament login flow. Verify behavior in queue workers, console commands, and API routes, where panel middleware should not apply but sometimes does.

Sequencing. Do policy decision → stakeholder sign-off (security/compliance + a communication plan) → migration and backfill → warn-only rollout → enforced rollout. The engineering work is a few days; the change-management and user-communication work is the real critical path. Do not run the migration and enforcement in the same release.

Operational Impact

Maintenance. Small code footprint, but a single-maintainer dependency with no dependents to surface breakage early. Budget for periodic review at each Filament major release, and treat the plugin as pinned-with-review rather than freely upgradable. Because the package is thin, an in-house fallback (a middleware plus a model column) is a realistic exit ramp if maintenance lapses — that caps the long-term risk meaningfully.

Support. Expect a durable trickle of tickets: users surprised by expiry, users who cannot change their password (SSO, shared accounts, locked-down service identities), and password-policy conflicts between the reset page and your existing validation rules. None of these are package defects, but they are the package's operational cost. Establish a support macro and a documented exemption process before enforcement goes live.

Scaling. Effectively free. One indexed column read per authenticated request, negligible at any realistic panel concurrency. No background jobs required unless pre-expiry notifications are enabled, in which case a scheduled command and mail throughput become relevant.

Failure modes to design around.

  • Global lockout from a resolver bug or a bad backfill — mitigate with an exempt-admin role and a documented config kill-switch.
  • Redirect loops between the enforcement middleware and the password-change route — verify the exclusion list covers the reset routes, logout, and static assets.
  • Null/legacy timestamp interpreted as expired — force a deliberate backfill.
  • Non-password identities trapped by an unenforceable policy.
  • API/token traffic unexpectedly subject to panel middleware.
  • Unannounced enforcement after a deploy, driving a spike in helpdesk volume and password resets in the same hour.

Ramp-up. An hour for a Laravel-fluent engineer to read the source and wire it up; half a day including migration, backfill, and panel registration. The genuinely time-consuming work is the policy decision, the compliance justification, the exemption model, and user communications — none of which the package addresses, and all of which determine whether the rollout succeeds or produces a backlash.

TPM verdict. Technically low-risk and cheap to adopt, but adoption should be driven by a named compliance obligation rather than a security-improvement narrative, and it should be gated behind an admin exemption plus a phased, communicated rollout. The 0-star/0-dependent signal is acceptable only because the package is thin enough to replace in-house on short notice.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
gmostafa/php-graphql-client
xeviant/paystack
snowsoft/faker
meditationsteps/blogetc
animalyoung/laravel-influxdb
onix-solutions/sms-telera
lonely-lights/prosetta
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin
artisan-build/community-prompts
vleroy/smart
ayles-software/laravel-australian-public-holidays
cboxdk/laravel-id-spatie
cboxdk/laravel-id-billing
cboxdk/laravel-id-billing-bridge
simple-as-fuck/php-performance-log