This commit is contained in:
2026-04-05 20:14:30 +00:00
parent 22ac0aa781
commit 1606778518
12 changed files with 130 additions and 57 deletions

View File

@@ -0,0 +1,55 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\Setting;
use App\Models\User;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Str;
class LoginController extends Controller
{
public function __invoke(Request $request): RedirectResponse
{
if (! Setting::isSetupComplete() || User::count() === 0) {
return redirect()->route('setup.index');
}
$credentials = $request->validate([
'email' => ['required', 'email'],
'password' => ['required', 'string', 'min:6'],
'remember' => ['nullable', 'boolean'],
]);
$throttleKey = Str::transliterate(Str::lower($credentials['email']) . '|' . $request->ip());
if (RateLimiter::tooManyAttempts($throttleKey, 5)) {
$seconds = RateLimiter::availableIn($throttleKey);
return back()
->withErrors(['email' => "Troppi tentativi. Riprova tra {$seconds} secondi."])
->withInput($request->only('email', 'remember'));
}
if (! Auth::attempt([
'email' => $credentials['email'],
'password' => $credentials['password'],
], $request->boolean('remember'))) {
RateLimiter::hit($throttleKey);
return back()
->withErrors(['email' => 'Credenziali non valide.'])
->withInput($request->only('email', 'remember'));
}
RateLimiter::clear($throttleKey);
$request->session()->regenerate();
activity()->causedBy(auth()->user())->log('login');
return redirect()->intended(route('dashboard'));
}
}

View File

@@ -0,0 +1,7 @@
<?php
namespace App\Http\Controllers;
abstract class Controller
{
}

View File

@@ -3,47 +3,16 @@
namespace App\Livewire\Auth;
use Livewire\Component;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Str;
use App\Models\Setting;
use App\Models\User;
class Login extends Component
{
public string $email = '';
public string $password = '';
public bool $remember = false;
protected function rules(): array
public function mount()
{
return [
'email' => 'required|email',
'password' => 'required|min:6',
];
}
public function login()
{
$this->validate();
$throttleKey = Str::transliterate(Str::lower($this->email) . '|' . request()->ip());
if (RateLimiter::tooManyAttempts($throttleKey, 5)) {
$seconds = RateLimiter::availableIn($throttleKey);
$this->addError('email', "Troppi tentativi. Riprova tra {$seconds} secondi.");
return;
if (! Setting::isSetupComplete() || User::count() === 0) {
return redirect()->route('setup.index');
}
if (!Auth::attempt(['email' => $this->email, 'password' => $this->password], $this->remember)) {
RateLimiter::hit($throttleKey);
$this->addError('email', 'Credenziali non valide.');
return;
}
RateLimiter::clear($throttleKey);
session()->regenerate();
activity()->causedBy(auth()->user())->log('login');
return redirect()->intended(route('dashboard'));
}
public function render()

View File

@@ -6,6 +6,7 @@ use Livewire\Component;
use Livewire\WithFileUploads;
use App\Models\Setting;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
class Wizard extends Component
@@ -33,11 +34,11 @@ class Wizard extends Component
public function mount()
{
if (Setting::isSetupComplete()) {
if (Setting::isSetupComplete() && User::count() > 0) {
return redirect()->route('dashboard');
}
$this->needsAdmin = User::count() <= 1;
$this->needsAdmin = User::count() === 0;
$setting = Setting::first();
if ($setting) {
@@ -107,10 +108,17 @@ class Wizard extends Component
'password' => Hash::make($this->admin_password),
]);
$admin->assignRole('amministratore');
Auth::login($admin);
request()->session()->regenerate();
}
session()->flash('success', 'Setup completato con successo!');
return redirect()->route('dashboard');
if (auth()->check()) {
return redirect()->route('dashboard');
}
return redirect()->route('login');
}
public function render()