Custom login page with name, username or email

class AdminPanelProvider extends PanelProvider { public function panel(Panel $panel): Panel { return $panel // ... ->login(Login::class) // ... } }

class Login extends BaseAuth { // ... }

namespace App\Filament\Pages\Auth;

use Filament\Forms\Form; use Filament\Forms\Components\Component; use Filament\Forms\Components\TextInput; use Filament\Http\Responses\Auth\Contracts\LoginResponse; use Filament\Pages\Auth\Login as BaseAuth; use Illuminate\Validation\ValidationException;

class Login extends BaseAuth { public function form(Form $form): Form { return $form ->schema([ $this->getLoginFormComponent(), $this->getPasswordFormComponent(), $this->getRememberFormComponent(), ]) ->statePath('data'); }

protected function getLoginFormComponent(): Component
{
return TextInput::make('login')
->label('Username')
->required()
->autocomplete()
->autofocus()
->extraInputAttributes(['tabindex' => 1]);
}
 
protected function getCredentialsFromFormData(array $data): array
{
$login_type = filter_var($data['login'], FILTER_VALIDATE_EMAIL ) ? 'email' : 'username';
 
return [
$login_type => $data['login'],
'password' => $data['password'],
];
}
 
public function authenticate(): ?LoginResponse
{
try {
return parent::authenticate();
} catch (ValidationException) {
throw ValidationException::withMessages([
'data.login' => __('filament-panels::pages/auth/login.messages.failed'),
]);
}
}

}

Komentar

Ada 1 komentar pada episode ini.