diff --git a/app/Http/Controllers/AuthenticationController.php b/app/Http/Controllers/AuthenticationController.php index f4b61c6..ab81a3a 100644 --- a/app/Http/Controllers/AuthenticationController.php +++ b/app/Http/Controllers/AuthenticationController.php @@ -6,6 +6,8 @@ use App\Http\Controllers\Controller; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Http\Response; +use Illuminate\Support\Facades\Auth; +use Modules\Authentication\Http\Requests\LoginRequest; class AuthenticationController extends Controller { @@ -22,15 +24,19 @@ class AuthenticationController extends Controller */ public function create() { - return view('authentication::create'); + return view('authentication::index'); } /** * Store a newly created resource in storage. */ - public function store(Request $request): RedirectResponse + public function store(LoginRequest $request): RedirectResponse { - // + $request->authenticate(); + + $request->session()->regenerate(); + + return redirect()->intended(('dashboard')); } /** @@ -60,8 +66,12 @@ class AuthenticationController extends Controller /** * Remove the specified resource from storage. */ - public function destroy($id) + public function destroy(Request $request): RedirectResponse { - // + Auth::guard('web')->logout(); + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return redirect('/'); } } diff --git a/app/Http/Requests/LoginRequest.php b/app/Http/Requests/LoginRequest.php new file mode 100644 index 0000000..9bb6b71 --- /dev/null +++ b/app/Http/Requests/LoginRequest.php @@ -0,0 +1,87 @@ + 'required|email', + 'password' => 'required' + ]; + } + + /** + * Attempt to authenticate the request's credentials. + * + * @return void + * + * @throws \Illuminate\Validation\ValidationException + */ + public function authenticate() + : void + { + $this->ensureIsNotRateLimited(); + + if (!Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) { + RateLimiter::hit($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => trans('auth.failed'), + ]); + } + + RateLimiter::clear($this->throttleKey()); + } + + /** + * Ensure the login request is not rate limited. + * + * @return void + * + * @throws \Illuminate\Validation\ValidationException + */ + public function ensureIsNotRateLimited() + : void + { + if (!RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { + return; + } + + event(new Lockout($this)); + + $seconds = RateLimiter::availableIn($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => trans('auth.throttle', [ + 'seconds' => $seconds, + 'minutes' => ceil($seconds / 60), + ]), + ]); + } + + /** + * Get the rate limiting throttle key for the request. + * + * @return string + */ + public function throttleKey() + : string + { + return Str::transliterate(Str::lower($this->input('email')) . '|' . $this->ip()); + } + } diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php index 26309bb..6a264bf 100644 --- a/resources/views/index.blade.php +++ b/resources/views/index.blade.php @@ -1,7 +1,107 @@ -@extends('authentication::layouts.master') +@extends('layouts.auth') + +@push('styles') + +@endpush @section('content') -

Hello World

- -

Module: {!! config('authentication.name') !!}

+
+
+
+
+ @csrf +
+

+ Sign in +

+
+ + Need an account? + + + Sign up + +
+
+
+ + + + Or + + + +
+
+ + + @error('email') + {{ $message }} + @enderror +
+
+
+ + + Forgot Password? + +
+ +
+ + +
+
+
+
+
+ + + +
+

+ Secure Access Portal +

+
+ A robust authentication gateway ensuring +
+ secure + + efficient user access + + to the LPJ Online +
+ Dashboard interface. +
+
+
+
+
@endsection diff --git a/routes/web.php b/routes/web.php index 2179300..36a0eac 100644 --- a/routes/web.php +++ b/routes/web.php @@ -14,6 +14,11 @@ use Modules\Authentication\Http\Controllers\AuthenticationController; | */ -Route::group([], function () { - Route::resource('authentication', AuthenticationController::class)->names('authentication'); -}); + Route::middleware('guest')->group(function () { + Route::get('login', [AuthenticationController::class, 'create'])->name('login'); + Route::post('login', [AuthenticationController::class, 'store']); + }); + + Route::middleware('auth')->group(function () { + Route::get('logout', [AuthenticationController::class, 'destroy'])->name('logout'); + });