PHP code example of spykapps / filament-passwordless-login
1. Go to this page and download the library: Download spykapps/filament-passwordless-login library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
spykapps / filament-passwordless-login example snippets
use SpykApp\PasswordlessLogin\Traits\HasMagicLogin;
class User extends Authenticatable
{
use HasMagicLogin;
}
use SpykApp\FilamentPasswordlessLogin\FilamentPasswordlessLoginPlugin;
public function panel(Panel $panel): Panel
{
return $panel
->plugin(
FilamentPasswordlessLoginPlugin::make()
);
}
use SpykApp\FilamentPasswordlessLogin\FilamentPasswordlessLoginPlugin;
use SpykApp\FilamentPasswordlessLogin\Enums\FilamentPasswordlessLoginActionPosition;
FilamentPasswordlessLoginPlugin::make()
// ── Login Page ──────────────────────────────────────
->loginPage() // Enable magic link login (default: true)
->loginPage(false) // Disable — keep default Filament password login
->login(MyCustomLoginPage::class) // Use your own custom login page class
->showPasswordLoginLink() // Show "Back to password login" link
->showPasswordLoginLink(false) // Hide it
// ── Redirect URLs ───────────────────────────────────
->redirectUrl('/admin/dashboard') // Where to go after login (default: auto-detects panel URL)
->failureUrl('/admin/login') // Where to go on expired/invalid link (default: auto-detects panel login URL)
// ── Login Action ────────────────────────────────────
->loginAction() // Enable login action (default: false)
->loginAction(false) // Disable
->loginActionPosition( // Where to show the action
FilamentPasswordlessLoginActionPosition::EmailFieldHint // As hint on email field
// or
FilamentPasswordlessLoginActionPosition::LoginFormEndButton // As button after login form
)
->loginActionIcon('heroicon-m-sparkles') // Custom icon
->loginActionColor('warning') // Custom color
// ── Action Modal ────────────────────────────────────
->slideover() // Open action modal as slide-over
->slideover(false) // Open as centered modal (default)
// ── Custom Mailable / Notification ──────────────────
->mailable(\App\Mail\MyMagicLinkMail::class) // Custom mailable class
->notification(\App\Notifications\MyMagicLinkNotif::class) // Custom notification class
// ── Resource ────────────────────────────────────────
->resource() // Enable token resource (default: true)
->resource(false) // Disable
->canCreateTokens() // Allow manual token creation (default: true)
->canCreateTokens(false) // Disable create
->canDeleteTokens() // Allow deletion (default: true)
->canDeleteTokens(false) // Disable delete
->resourceSlug('magic-links') // Custom URL slug
->navigationGroup('Security') // Custom nav group (or use lang file)
->navigationIcon('heroicon-o-key') // Custom nav icon
->navigationSort(50) // Custom sort order
// ── Widgets (shown on resource page) ────────────────
->statsWidget() // Enable stats widget (default: true)
->statsWidget(false) // Disable
->chartsWidget() // Enable chart widgets (default: true)
->chartsWidget(false) // Disable
->chartDays(60) // Custom chart time range in days
namespace App\Filament\Pages\Auth;
use SpykApp\FilamentPasswordlessLogin\Pages\MagicLinkLogin;
use Filament\Schemas\Schema;
use Filament\Forms\Components\TextInput;
use Illuminate\Contracts\Support\Htmlable;
class MyMagicLogin extends MagicLinkLogin
{
public function getHeading(): string|Htmlable
{
return 'Welcome! Sign in securely.';
}
public function getSubheading(): string|Htmlable|null
{
if ($this->magicLinkSent) {
return 'A secure link has been sent to your inbox.';
}
return 'No password needed — we\'ll email you a login link.';
}
}
FilamentPasswordlessLoginPlugin::make()
->loginPage(false) // Keep the default password login
->loginAction() // Enable the action
->loginActionPosition(FilamentPasswordlessLoginActionPosition::EmailFieldHint)
FilamentPasswordlessLoginPlugin::make()
->loginPage(false) // Keep the default password login
->loginAction() // Enable the action
->loginActionPosition(FilamentPasswordlessLoginActionPosition::LoginFormEndButton)
FilamentPasswordlessLoginPlugin::make()
->loginAction()
->loginActionIcon('heroicon-m-envelope')
->loginActionColor('success')
->slideover() // Open modal as slide-over
use SpykApp\FilamentPasswordlessLogin\Actions\SendMagicLinkAction;
protected function getHeaderActions(): array
{
return [
SendMagicLinkAction::make(),
];
}
use SpykApp\FilamentPasswordlessLogin\Actions\SendMagicLinkAction;
public static function table(Table $table): Table
{
return $table
->columns([...])
->actions([
SendMagicLinkAction::make()
->fillForm(fn ($record) => ['email' => $record->email]),
]);
}
use SpykApp\FilamentPasswordlessLogin\Actions\SendMagicLinkAction;
TextInput::make('email')
->email()
->hintAction(SendMagicLinkAction::make())
SendMagicLinkAction::make()->asSlideover()
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class CustomMagicLinkMail extends Mailable
{
use Queueable, SerializesModels;
public function __construct(
public string $url,
public int $expiryMinutes,
) {}
public function envelope(): Envelope
{
return new Envelope(
subject: 'Your Secure Login Link',
);
}
public function content(): Content
{
return new Content(
markdown: 'emails.magic-link',
with: [
'url' => $this->url,
'expiryMinutes' => $this->expiryMinutes,
],
);
}
}
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class CustomMagicLinkNotification extends Notification
{
use Queueable;
public function __construct(
public string $url,
public int $expiryMinutes,
public array $metadata = [],
) {}
public function via($notifiable): array
{
return ['mail'];
}
public function toMail($notifiable): MailMessage
{
return (new MailMessage)
->subject('Your Login Link — ' . config('app.name'))
->greeting('Hello ' . ($notifiable->name ?? '') . '!')
->line('Click the button below to sign in securely.')
->action('Sign In', $this->url)
->line('This link expires in ' . $this->expiryMinutes . ' minutes.')
->line('If you did not request this, please ignore this email.');
}
}
use SpykApp\FilamentPasswordlessLogin\Enums\FilamentPasswordlessLoginActionPosition;
FilamentPasswordlessLoginActionPosition::EmailFieldHint // Hint icon on email field
FilamentPasswordlessLoginActionPosition::LoginFormEndButton // Button after login form