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') -
Module: {!! config('authentication.name') !!}
+