Save workspace changes
This commit is contained in:
@@ -2,15 +2,21 @@
|
||||
|
||||
namespace App\Http\Requests\Auth;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Auth\Events\Lockout;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\RateLimiter;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class LoginRequest extends FormRequest
|
||||
{
|
||||
private ?User $authenticatedUser = null;
|
||||
|
||||
private string $authenticatedVia = 'email';
|
||||
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
@@ -27,7 +33,7 @@ class LoginRequest extends FormRequest
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'email' => ['required', 'string', 'email'],
|
||||
'email' => ['required', 'string'],
|
||||
'password' => ['required', 'string'],
|
||||
];
|
||||
}
|
||||
@@ -41,7 +47,25 @@ class LoginRequest extends FormRequest
|
||||
{
|
||||
$this->ensureIsNotRateLimited();
|
||||
|
||||
if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
|
||||
$identifier = strtolower(trim((string) $this->input('email')));
|
||||
$password = (string) $this->input('password');
|
||||
$user = User::query()
|
||||
->whereRaw('LOWER(email) = ?', [$identifier])
|
||||
->first();
|
||||
$authenticatedVia = 'email';
|
||||
|
||||
if (! $user) {
|
||||
$candidate = User::query()
|
||||
->whereRaw('LOWER(username) = ?', [$identifier])
|
||||
->first();
|
||||
|
||||
if ($candidate?->supportsUsernameLogin()) {
|
||||
$user = $candidate;
|
||||
$authenticatedVia = 'username';
|
||||
}
|
||||
}
|
||||
|
||||
if (! $user || ! Hash::check($password, (string) $user->password)) {
|
||||
RateLimiter::hit($this->throttleKey());
|
||||
|
||||
throw ValidationException::withMessages([
|
||||
@@ -49,9 +73,23 @@ class LoginRequest extends FormRequest
|
||||
]);
|
||||
}
|
||||
|
||||
Auth::login($user, $this->boolean('remember'));
|
||||
$this->authenticatedUser = $user;
|
||||
$this->authenticatedVia = $authenticatedVia;
|
||||
|
||||
RateLimiter::clear($this->throttleKey());
|
||||
}
|
||||
|
||||
public function authenticatedUser(): ?User
|
||||
{
|
||||
return $this->authenticatedUser;
|
||||
}
|
||||
|
||||
public function authenticatedViaUsername(): bool
|
||||
{
|
||||
return $this->authenticatedVia === 'username';
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure the login request is not rate limited.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user