Hi Guys,
I apologize for the confusion, but the code you provided seems to be a combination of various Laravel versions and doesn't match Laravel 10. Additionally, the formatting seems to be incorrect.
Laravel 10 hasn't been released as of my knowledge cutoff in September 2021. The latest stable version is Laravel 8.x. However, I can provide you with an example of how to implement a custom forgot password functionality in Laravel 8.
Here's an example code for a custom forgot password functionality in Laravel 8:
Step 1: Create "password_resets" table migrationCreate a new migration using the following command:
php artisan make:migration create_password_resets_table --create=password_resets
Then, open the generated migration file and define the table schema as follows:
<php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreatePasswordResetsTable extends Migration { public function up() { Schema::create('password_resets', function (Blueprint $table) { $table->string('email')->index(); $table->string('token'); $table->timestamp('created_at')->nullable(); }); } public function down() { Schema::dropIfExists('password_resets'); } } >Step 2: Create the ForgotPasswordController
Create a new controller using the following command:
php artisan make:controller ForgotPasswordController
Open the generated controller file and replace its contents with the following code:
<?php use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Password; use Illuminate\Support\Str; class ForgotPasswordController extends Controller { public function showForgotPasswordForm() { return view('auth.forgot-password'); } public function submitForgotPasswordForm(Request $request) { $request->validate([ 'email' => 'required|email', ]); $status = Password::sendResetLink( $request->only('email') ); return $status === Password::RESET_LINK_SENT ? back()->with('success', 'Password reset link sent!') : back()->withErrors(['email' => __($status)]); } public function showResetPasswordForm(Request $request) { return view('auth.reset-password', ['token' => $request->token, 'email' => $request->email]); } public function submitResetPasswordForm(Request $request) { $request->validate([ 'token' => 'required', 'email' => 'required|email', 'password' => 'required|min:8|confirmed', ]); $resetPasswordStatus = Password::reset( $request->only('email', 'password', 'password_confirmation', 'token'), function ($user, $password) { $user->forceFill([ 'password' => bcrypt($password), 'remember_token' => Str::random(60), ])->save(); } ); return $resetPasswordStatus === Password::PASSWORD_RESET ? redirect()->route('login')->with('success', 'Password has been reset!') : back()->withErrors(['email' => [__($resetPasswordStatus)]]); } } ?>Step 3: Define routes
In your `routes/web.php` file, add the following routes:
<?php use App\Http\Controllers\ForgotPasswordController; Route::get('forgot-password', [ForgotPasswordController::class, 'showForgotPasswordForm']) ->name('password.request'); Route::post('forgot-password', [ForgotPasswordController::class, 'submitForgotPasswordForm']) ->name('password.email'); Route::get('reset-password/{token}/{email}', [ForgotPasswordController::class, 'showResetPasswordForm']) ->name('password.reset'); Route::post('reset-password', [ForgotPasswordController::class, 'submitResetPasswordForm']) ->name('password.update'); ?>Step 4: Create the views
Create the following views inside the `resources/views/auth` directory:
`forgot-password.blade.php`:
@extends('layouts.app') @section('content') <div class="card"> <div class="card-header">{{ __('Reset Password') }}</div> <div class="card-body"> @if (session('status')) <div class="alert alert-success" role="alert"> {{ session('status') }} </div> @endif <form method="POST" action="{{ route('password.email') }}"> @csrf <div class="form-group"> <label for="email">{{ __('Email') }}</label> <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus> @error('email') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> <div class="form-group mb-0"> <button type="submit" class="btn btn-primary"> {{ __('Send Password Reset Link') }} </button> </div> </form> </div> </div> @endsection
`reset-password.blade.php`:
@extends('layouts.app') @section('content') <div class="card"> <div class="card-header">{{ __('Reset Password') }}</div> <div class="card-body"> <form method="POST" action="{{ route('password.update') }}"> @csrf <input type="hidden" name="token" value="{{ $token }}"> <input type="hidden" name="email" value="{{ $email }}"> <div class="form-group"> <label for="password">{{ __('Password') }}</label> <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password"> @error('password') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> <div class="form-group"> <label for="password-confirm">{{ __('Confirm Password') }}</label> <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password"> </div> <div class="form-group mb-0"> <button type="submit" class="btn btn-primary"> {{ __('Reset Password') }} </button> </div> </form> </div> </div> @endsection
Make sure to have a proper layout file (`resources/views/layouts/app.blade.php`) that includes the necessary HTML structure, CSS, and JS imports.
Step 5: Update environment fileEnsure your `.env` file contains the correct mail driver configuration, such as the following:
MAIL_MAILER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=null
I hope it can help you...
No comments:
Post a Comment