Laravel 8 E-Commerce - User Change Password
In this video, we will learn about how to allow users to change their passwords.
Let's explore how to create a change password feature for users or customers.
First, we need to create a new Livewire component.
Switch to the command prompt and run the following command to create a new Livewire component:
php artisan make:livewire user/UserChangePasswordComponent
Now, run the application:
php artisan serve
Next, switch to the project and create a route for this new component.
Go to the routes
directory and open the web.php
file.
Inside the user middleware route group, create a new route:
Route::get('/user/change-password',UserChangePasswordComponent::class)->name('user.changepassword');
Now, go to the UserChangePasswordComponent.php
class file and write the following code:
<?php
namespace App\Http\Livewire\User;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Livewire\Component;
class UserChangePasswordComponent extends Component
{
public $current_password;
public $password;
public $password_confirmation;
public function updated($fields)
{
$this->validateOnly($fields,[
'current_password'=>'required',
'password' => 'required|min:8|confirmed|different:current_password'
]);
}
public function changePassword()
{
$this->validate([
'current_password'=>'required',
'password' => 'required|min:8|confirmed|different:current_password'
]);
if(Hash::check($this->current_password,Auth::user()->password))
{
$user = User::findOrFail(Auth::user()->id);
$user->password = Hash::make($this->password);
$user->save();
session()->flash('password_success','Password has been changed successfully!');
}
else
{
session()->flash('password_error','Password does not match!');
}
}
public function render()
{
return view('livewire.user.user-change-password-component')->layout('layouts.base');
}
}
Open the user-change-password-component.blade.php
view file and write the following code:
<div>
<div class="container" style="padding: 30px 0;">
<div class="row">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-heading">
Change Password
</div>
<div class="panel-body">
@if(Session::has('password_success'))
<div class="alert alert-success" role="alert">{{Session::get('password_success')}}</div>
@endif
@if(Session::has('password_error'))
<div class="alert alert-danger" role="alert">{{Session::get('password_error')}}</div>
@endif
<form class="form-horizontal" wire:submit.prevent="changePassword">
<div class="form-group">
<label class="col-md-4 control-label">Current Password</label>
<div class="col-md-4">
<input type="password" placeholder="Current Password" class="form-control input-md" name="current_password" wire:model="current_password" />
@error('current_password') <p class="text-danger">{{$message}}</p> @enderror
</div>
</div>
<div class="form-group">
<label class="col-md-4 control-label">New Password</label>
<div class="col-md-4">
<input type="password" placeholder="New Password" class="form-control input-md" name="password" wire:model="password" />
@error('password') <p class="text-danger">{{$message}}</p> @enderror
</div>
</div>
<div class="form-group">
<label class="col-md-4 control-label">Confirm Password</label>
<div class="col-md-4">
<input type="password" placeholder="Confirm Password" class="form-control input-md" name="password_confirmation" wire:model="password_confirmation" />
@error('password_confirmation') <p class="text-danger">{{$message}}</p> @enderror
</div>
</div>
<div class="form-group">
<label class="col-md-4 control-label"></label>
<div class="col-md-4">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
Let's test the password change feature.
Enter your current password:
Enter your new password:
Retype your new password:
Click on submit.
You should see a message indicating that your password has been changed successfully!
And that's how you can create a change password feature for users.