DEV Community

Lance Munyao
Lance Munyao

Posted on

Laravel Authentication with MaryUI

Laravel makes Authentication really easy work with and if you're looking to quickly setup auth on maryui/livewire, this is the article for you.

Step 1: Create a laravel project if you haven't

composer create-project laravel/laravel auth_demo 
Enter fullscreen mode Exit fullscreen mode

Step 2: Setup Livewire and maryui
I prefer using bun and not having volt

composer require robsontenorio/mary php artisan mary:install 
Enter fullscreen mode Exit fullscreen mode

Step 3: Create new components to work with and setup their routes

php artisan make:livewire Dashboard 
Enter fullscreen mode Exit fullscreen mode

in routes/web.php

<?php use App\Livewire\Welcome; use Illuminate\Support\Facades\Route; use App\Livewire\Dashboard; Route::get('/', Welcome::class); Route::get('/dashboard', Dashboard::class)->name('dashboard'); 
Enter fullscreen mode Exit fullscreen mode

have simple forms in the frontend - resources/views/livewire/dashboard.blade.php

<div> <x-button wire:click="openRegisterModal" label="Register"/> <x-button wire:click="openLoginModal" label="Login" /> <!-- Register Modal --> <x-modal wire:model="registerModal"> <x-form wire:submit="registerUser"> <x-input wire:model="name" label="Name" /> <x-input wire:model="email" label="Email" type="email" /> <x-input wire:model="password" label="Password" type="password" /> <x-slot:actions> <x-button type="submit">Register</x-button> </x-slot:actions> </x-form> </x-modal> <!-- Login Modal --> <x-modal wire:model="loginModal"> <x-form wire:submit="loginUser"> <x-input wire:model="email" label="Email" type="email" /> <x-input wire:model="password" label="Password" type="password" /> <x-slot:actions> <x-button type="submit">Login</x-button> </x-slot:actions> </x-form> </x-modal> </div> 
Enter fullscreen mode Exit fullscreen mode

Have the corresponding backend php code in App/Livewire/Dashboard.php

<?php namespace App\Livewire; use Illuminate\Support\Collection; use Livewire\Component; use Mary\Traits\Toast; use Illuminate\Support\Facades\Auth; use App\Models\User; class Dashboard extends Component { use Toast; public bool $registerModal, $loginModal = false; public $name, $email, $password; public function openRegisterModal() { $this->registerModal = true; } public function openLoginModal() { $this->loginModal = true; } public function closeRegisterModal() { $this->registerModal = false; } public function closeLoginModal() { $this->loginModal = false; } public function registerUser() { $this->validate([ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:8', ]); User::create([ 'name' => $this->name, 'email' => $this->email, 'password' => bcrypt($this->password), ]); Auth::login(User::where('email', $this->email)->first()); $this->success('Registration successful! You are now logged in.'); $this->reset(['name', 'email', 'password']); $this->registerModal = false; } public function loginUser() { $this->validate([ 'email' => 'required|string|email|max:255', 'password' => 'required|string|min:8', ]); if (Auth::attempt(['email' => $this->email, 'password' => $this->password])) { $this->success('Login successful!'); $this->reset(['email', 'password']); $this->loginModal = false; } else { $this->error('Invalid credentials. Please try again.'); } } public function render() { return view('livewire.welcome'); } } 
Enter fullscreen mode Exit fullscreen mode

And that's it!

Top comments (0)