feat: rate limiter 3 login per-minute

feat: failed login message
This commit is contained in:
myuqinurrohman 2025-04-01 13:47:24 +07:00
parent f2be35c45b
commit 607f83d3c6
4 changed files with 36 additions and 4 deletions

View File

@ -27,7 +27,7 @@ public function loginAction(LoginRequest $request){
$request->session()->regenerate();
return redirect()->intended('/dashboard/overview');
}else{
return redirect()->back();
return redirect()->back()->with('failed-status', 'Pastikan data benar dan akun sudah terdaftar.');
}
}

View File

@ -2,6 +2,9 @@
namespace App\Providers;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
@ -19,6 +22,10 @@ public function register(): void
*/
public function boot(): void
{
//
RateLimiter::for('login', function (Request $request) {
return Limit::perMinute(3)->by($request->ip())->response(function (Request $request) {
return redirect()->back()->with('toManyRequest', 'Harap tunggu 1 menit untuk login ulang.');
});
});
}
}

View File

@ -13,6 +13,7 @@
<link rel="stylesheet" href="{{asset('assets/dashboard/css/dashlite.css?ver=3.0.3')}}">
<link rel="stylesheet" href="{{asset('assets/dashboard/css/custom.css')}}">
<link id="skin-default" rel="stylesheet" href="{{asset('assets/dashboard/css/theme.css?ver=3.0.3')}}">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert.min.css">
</head>
<body class="nk-body bg-white npc-default pg-auth">
@ -75,6 +76,9 @@
<div class="text-center mt-5">
<span class="fw-500">Belum memiliki akun? <a href="{{route('auth.register')}}">Buat akun</a></span>
</div>
<div class="text-center text-primary mt-1">
<span class="fw-500 text-decoration-underline"><a href="{{route('homepage.landing')}}">Beranda</a></span>
</div>
</div><!-- .nk-block -->
<div class="nk-block nk-auth-footer">
<div class="mt-3 text-center">
@ -95,5 +99,26 @@
<!-- JavaScript -->
<script src="{{asset('assets/dashboard/js/bundle.js?ver=3.0.3')}}"></script>
<script src="{{asset('assets/dashboard/js/scripts.js?ver=3.0.3')}}"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert.min.js"></script>
@if (session('toManyRequest'))
<script>
Swal.fire({
icon: 'warning',
title: 'Terlalu banyak login',
text: '{{session('toManyRequest')}}',
confirmButtonText: 'OK'
});
</script>
@elseif (session('failed-status'))
<script>
Swal.fire({
icon: 'error',
title: 'Login Gagal',
text: '{{ session('failed-status') }}',
confirmButtonText: 'OK'
});
</script>
@endif
</html>

View File

@ -56,8 +56,8 @@
Route::get('/login', 'login')->name('login')->middleware('authenticated');
Route::name('auth.')->group(function(){
Route::post('/login', 'loginAction')->name('login.action');
Route::get('/register', 'register')->name('register')->middleware('authenticated');;
Route::post('/login', 'loginAction')->name('login.action')->middleware('throttle:login');
Route::get('/register', 'register')->name('register')->middleware('authenticated');
Route::post('/register', 'registerAction')->name('register.action');
Route::get('/register-success', 'registerSuccess')->name('register.success')->middleware('authenticated');;
Route::get('/logout', 'logout')->name('logout');