From 650277b7fc7275aecaed6307ccef027a8b83ae1c Mon Sep 17 00:00:00 2001 From: Hasin Hayder Date: Wed, 18 May 2022 21:56:40 +0600 Subject: [PATCH] SPA Login/Registration with Form --- app/Http/Controllers/LoginSPAController.php | 58 ++++++++++++++ resources/js/app.js | 21 +++++ resources/js/bootstrap.js | 2 +- resources/views/login.blade.php | 86 +++++++++++++++++++++ resources/views/welcome.blade.php | 11 ++- routes/web.php | 8 +- 6 files changed, 182 insertions(+), 4 deletions(-) create mode 100644 app/Http/Controllers/LoginSPAController.php create mode 100644 resources/views/login.blade.php diff --git a/app/Http/Controllers/LoginSPAController.php b/app/Http/Controllers/LoginSPAController.php new file mode 100644 index 0000000..3f824de --- /dev/null +++ b/app/Http/Controllers/LoginSPAController.php @@ -0,0 +1,58 @@ +validate([ + 'email' => ['required', 'email'], + 'password' => ['required'], + ]); + + if (Auth::attempt($credentials)) { + $request->session()->regenerate(); + return redirect()->route('home'); + } + + return back()->withErrors([ + 'email' => 'Invalid Credentials', + ])->onlyInput('email'); + } + + public function register(Request $request) { + $creds = $request->validate([ + 'email' => 'required|email', + 'password' => 'required' + ]); + + $user = User::where('email', $creds['email'])->first(); + if (!$user) { + User::create([ + 'name' => $request->name, + 'email' => $creds['email'], + 'password' => Hash::make($creds['password']) + ]); + } + + return $this->login($request); + } + + public function logout(Request $request) { + Auth::logout(); + $request->session()->invalidate(); + $request->session()->regenerateToken(); + return redirect('/'); + } + + function loginForm() { + if (Auth::check()) { + return redirect('/'); + } + return view('login'); + } +} diff --git a/resources/js/app.js b/resources/js/app.js index 40c55f6..a4a4c86 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -1 +1,22 @@ +const { default: axios } = require('axios'); + require('./bootstrap'); + +const app = { + init(){ + //do something + }, + login(){ + axios.get('/sanctum/csrf-cookie').then(response => { + axios.post('/login',{ + 'email':'email@example.com', + 'password':'ThisIsABadPassword' + }).then(response=>{ + location.href='/' + }) + }); + } +} + +window.app = app +app.init() diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js index 6922577..87e1452 100644 --- a/resources/js/bootstrap.js +++ b/resources/js/bootstrap.js @@ -7,7 +7,7 @@ window._ = require('lodash'); */ window.axios = require('axios'); - +window.axios.defaults.withCredentials = true; window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; /** diff --git a/resources/views/login.blade.php b/resources/views/login.blade.php new file mode 100644 index 0000000..129a58e --- /dev/null +++ b/resources/views/login.blade.php @@ -0,0 +1,86 @@ + + + + + + + + Login + + + + + +
+ +
+ + +
+

Brand

+ +

Welcome back!

+ + {{-- +
+ + + + + + +
+ + Sign in with Google +
--}} +
+ @csrf +
+ + + Login / Register + + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+ + +
+ +
+ +
+ +
+ + + or sign up + + +
+
+ + {{-- --}} +
+
+
+ + + diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php index dd6a45d..d79f55f 100644 --- a/resources/views/welcome.blade.php +++ b/resources/views/welcome.blade.php @@ -25,12 +25,14 @@ @if (Route::has('login')) @@ -44,6 +46,11 @@ + @if (Auth::check()) +
+

Welcome, {{Auth::user()->name}}

+
+ @endif
diff --git a/routes/web.php b/routes/web.php index b130397..0aa4127 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,7 @@ name('home'); + +Route::post('/register',[LoginSPAController::class,'register']); +Route::post('/login',[LoginSPAController::class,'login']); +Route::get('/logout',[LoginSPAController::class,'logout'])->name('logout'); +Route::get('/login',[LoginSPAController::class,'loginForm'])->name('login');