artmin96/filament-password-less
Add passwordless authentication to Filament panels with artmin96/filament-password-less. Let users sign in through secure email magic links instead of passwords, with straightforward Laravel/Filament integration and a configurable login flow for faster, safer access.
artmin96/filament-password-less swaps Filament's email+password login for a magic-link / one-time-login flow: the user enters their email, receives a signed link, and clicking it authenticates them into the panel.
Minimum path to first login:
composer require artmin96/filament-password-less — on Laravel 10 you need ^1.0.3; 1.0.2 and below do not declare Laravel 10 support.config/filament-password-less.php) before touching anything else — expiry window, notification class, and the User model contract all live there.App\Models\User) so it can issue and validate login tokens.PanelProvider (->plugin(...)), and remove/replace the default ->login() if the package expects to own that route.php artisan migrate then php artisan filament:cache-components (or optimize:clear) so the panel picks up the new routes.First meaningful use case: an internal admin panel or customer portal where you want to eliminate password storage/reset support load. Test it end-to-end with MAIL_MAILER=log locally so you can copy the link out of storage/logs/laravel.log.
Where to look first: the README's install section, then the published config file — the config is the de-facto documentation for token lifetime and notification customisation.
Trait on the User model. Most integrations hinge on adding the package trait (plus, where required, implements for the contract) to User. Do this before registering the plugin, otherwise the panel boots a login page whose model can't mint tokens.
Per-panel opt-in. Register the plugin only on the panels you want passwordless. Keeping a second panel on stock ->login() is a clean way to retain a break-glass password route for staff while giving customers magic links.
Notification customisation. Subclass or swap the notification class in config to control the mail subject, branding, and queueing. Push it onto a queue (ShouldQueue) if you're on a slow SMTP relay — the request blocks on the send otherwise.
Integration with existing auth. If you already have password login, keep ->passwordReset() and the standard login as a fallback during rollout, then flip. If you're greenfield, don't seed passwords at all — it's the point of the package.
Testing. Use Notification::fake() and assert the magic-link notification was sent to the right user, then extract the signed URL from the notification to simulate the click. This is far more reliable than hitting the mail driver in CI.
Throttling. Wrap the request route in the package's rate limiter or your own throttle: middleware keyed on email + IP so the endpoint can't be used to spray inboxes.
^1.0.3 explicitly and run composer why-not artmin96/filament-password-less 1.0.3 if resolution fails. Correspondingly, check your Filament major (v2 vs v3) matches what the release supports; the notes only mention Laravel.expires_at when debugging "the link doesn't work".->path() or domain, the generated URL can point at the wrong host. Set APP_URL correctly and check url() output before blaming the package.php artisan config:cache will freeze the package config; republish and re-cache after changing the notification class, or the swap silently won't apply.How can I help you explore Laravel packages today?