feat: add rate limiting, case-insensitive usernames and session security
This commit is contained in:
@@ -43,7 +43,15 @@ class CompleteProfileController extends Controller
|
||||
}
|
||||
|
||||
$request->validate([
|
||||
'username' => ['required', 'string', 'max:255', 'alpha_dash', 'unique:'.User::class],
|
||||
'username' => [
|
||||
'required', 'string', 'max:255', 'alpha_dash',
|
||||
function ($attribute, $value, $fail) {
|
||||
$exists = User::whereRaw('LOWER(username) = ?', [strtolower($value)])->exists();
|
||||
if ($exists) {
|
||||
$fail('The username has already been taken.');
|
||||
}
|
||||
},
|
||||
],
|
||||
'first_name' => ['required', 'string', 'max:255'],
|
||||
'last_name' => ['required', 'string', 'max:255'],
|
||||
]);
|
||||
@@ -62,6 +70,7 @@ class CompleteProfileController extends Controller
|
||||
event(new Registered($user));
|
||||
|
||||
Auth::login($user, remember: true);
|
||||
$request->session()->regenerate();
|
||||
|
||||
return redirect()->intended(config('auth-ui.redirects.login', '/'));
|
||||
}
|
||||
|
||||
@@ -37,7 +37,15 @@ class RegisterController extends Controller
|
||||
}
|
||||
|
||||
$request->validate([
|
||||
'username' => ['required', 'string', 'max:255', 'alpha_dash', 'unique:'.User::class],
|
||||
'username' => [
|
||||
'required', 'string', 'max:255', 'alpha_dash',
|
||||
function ($attribute, $value, $fail) {
|
||||
$exists = User::whereRaw('LOWER(username) = ?', [strtolower($value)])->exists();
|
||||
if ($exists) {
|
||||
$fail('The username has already been taken.');
|
||||
}
|
||||
},
|
||||
],
|
||||
'first_name' => ['required', 'string', 'max:255'],
|
||||
'last_name' => ['required', 'string', 'max:255'],
|
||||
'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class],
|
||||
|
||||
@@ -79,7 +79,7 @@ class SocialiteController extends Controller
|
||||
$suggestedUsername = $this->suggestUsername($socialUser);
|
||||
|
||||
// Check if username is already taken
|
||||
if (User::where('username', $suggestedUsername)->exists()) {
|
||||
if (User::whereRaw('LOWER(username) = ?', [strtolower($suggestedUsername)])->exists()) {
|
||||
// Store social data in session and redirect to complete profile
|
||||
session()->put('socialite_user', [
|
||||
'email' => $socialUser->getEmail(),
|
||||
@@ -103,6 +103,7 @@ class SocialiteController extends Controller
|
||||
}
|
||||
|
||||
Auth::login($user, remember: true);
|
||||
request()->session()->regenerate();
|
||||
|
||||
return redirect()->intended(config('auth-ui.redirects.login', '/'));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user