Files
fotospiel-app/app/Filament/SuperAdmin/Pages/Auth/Login.php

79 lines
2.2 KiB
PHP

<?php
namespace App\Filament\SuperAdmin\Pages\Auth;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Auth\Pages\Login as BaseLogin;
use Filament\Auth\Http\Responses\Contracts\LoginResponse;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\ValidationException;
class Login extends BaseLogin implements HasForms
{
use InteractsWithForms;
public function authenticate(): ?LoginResponse
{
$data = $this->form->getState();
$credentials = $this->getCredentialsFromFormData($data);
if (! Auth::attempt($credentials, $data['remember'] ?? false)) {
throw ValidationException::withMessages([
'data.email' => __('auth.failed'),
]);
}
$user = Auth::user();
if (! $user->email_verified_at) {
Auth::logout();
throw ValidationException::withMessages([
'data.email' => 'Your email address is not verified. Please check your email for a verification link.',
]);
}
// SuperAdmin-spezifisch: Prüfe auf SuperAdmin-Rolle, keine Tenant-Prüfung
if ($user->role !== 'superadmin') {
Auth::logout();
throw ValidationException::withMessages([
'data.email' => 'You do not have access to the SuperAdmin panel. Contact support.',
]);
}
session()->regenerate();
return $this->getLoginResponse();
}
protected function getCredentialsFromFormData(array $data): array
{
return [
'email' => $data['email'],
'password' => $data['password'],
];
}
public function getFormSchema(): array
{
return [
TextInput::make('data.email')
->label('Email')
->email()
->required()
->autofocus(),
TextInput::make('data.password')
->label('Password')
->password()
->required()
->extraAttributes(['tabindex' => 2]),
Checkbox::make('data.remember')
->label('Remember me'),
];
}
}