From 60afe0c441deb8f4a04424799e5cd0b728d788f8 Mon Sep 17 00:00:00 2001 From: Nurmuhammet Allanov Date: Mon, 22 Sep 2025 13:35:08 +0500 Subject: [PATCH] Add mass assignable attributes to User model and specify custom login page in AdminPanelProvider --- app/Filament/Pages/Auth/Login.php | 46 +++++++++++++++++++ app/Models/User.php | 12 +++++ app/Providers/Filament/AdminPanelProvider.php | 3 +- ...133110_add_phone_number_to_users_table.php | 28 +++++++++++ 4 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 app/Filament/Pages/Auth/Login.php create mode 100644 database/migrations/2025_09_22_133110_add_phone_number_to_users_table.php diff --git a/app/Filament/Pages/Auth/Login.php b/app/Filament/Pages/Auth/Login.php new file mode 100644 index 0000000..277ab1f --- /dev/null +++ b/app/Filament/Pages/Auth/Login.php @@ -0,0 +1,46 @@ +components([ + $this->getLoginFormComponent(), + $this->getPasswordFormComponent(), + $this->getRememberFormComponent(), + ]); + } + + protected function getLoginFormComponent(): TextInput + { + return TextInput::make('login') + ->label('Email or Phone Number') + ->required() + ->autofocus(); + } + + protected function getCredentialsFromFormData(array $data): array + { + $login_type = filter_var($data['login'], FILTER_VALIDATE_EMAIL) ? 'email' : 'phone_number'; + + return [ + $login_type => $data['login'], + 'password' => $data['password'], + ]; + } + + protected function throwFailureValidationException(): never + { + throw ValidationException::withMessages([ + 'data.login' => __('filament-panels::auth/pages/login.messages.failed'), + ]); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 7184f64..334aafd 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -14,6 +14,18 @@ class User extends Authenticatable implements FilamentUser /** @use HasFactory */ use HasFactory, Notifiable; + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'name', + 'email', + 'password', + 'phone_number', + ]; + /** * The attributes that should be hidden for serialization. * diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 178194d..4ae0ae6 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -2,6 +2,7 @@ namespace App\Providers\Filament; +use App\Filament\Pages\Auth\Login; use Filament\Pages\Dashboard; use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\DisableBladeIconComponents; @@ -27,7 +28,7 @@ class AdminPanelProvider extends PanelProvider ->default() ->id('panel') ->path('panel') - ->login() + ->login(Login::class) ->registration() ->colors([ 'primary' => Color::Amber, diff --git a/database/migrations/2025_09_22_133110_add_phone_number_to_users_table.php b/database/migrations/2025_09_22_133110_add_phone_number_to_users_table.php new file mode 100644 index 0000000..cb2d69f --- /dev/null +++ b/database/migrations/2025_09_22_133110_add_phone_number_to_users_table.php @@ -0,0 +1,28 @@ +string('phone_number')->unique()->nullable()->after('email'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('phone_number'); + }); + } +};