Halo teman-teman semuanya, pada kesempatan kali ini kita semua akan
belajar bagaimana cara membuat Authentication di Laravel
menggunakan Laravel Fortify Jadi apa Laravel Fortify itu sendiri ? Laravel
Fortify merupakan backend uathentication yang digunakan oleh Laravel
Jetsream. Ya benar, bahwa Laravel Jetstream untuk proses authentication dia
menggunakan service yang dimiliki oleh Laravel Fortify.
Seperti, register, login, forgot password, reset password, sampai two-factor
authentication.
Publish Konfigurasi
Setelah kita berhasil menginstall Laravel Fortify di dalam project Laravel kita,
kita bisa melakukan publish konfigurasi, ini akan membantu kita untuk
melakukan kustomisasi fitur-fitur ataupun logika yang ada di dalam Laravel
Fortify. Silahkaan jalankan perintah di bawah ini :
php artisan vendor:publish --provider="Laravel\Fortify\FortifyServiceProvider"
Jika perintah di atas berhasil dijalankan, maka kita akan mendapatkan banyak
file-file config, diantaranya adalah :
app/Actions/Fortify/
app/config/fortify.php
app/Providers/FortifyServiceProvider.php
Halo teman-teman semuanya, pada kesempatan kali ini kita semua akan
belajar bagaimana cara installasi project Laravel baru yang akan kita gunakan
untuk praktek membuat Authentication dengan Laravel Fortify. Sebelum kita
mulai membuat project Laravel baru, pastikan teman-teman sudah
menginstall Composer terlebih dahulu.
Composer
Server Requirements
Setelah kita berhasil menginstall project Laravel baru, sekarang kita lanjutkan
untuk mengatur koneksi database dan membuat database. SIlahkan buka
file .env kemudian cari kode berikut ini :
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
Silahkan masuk di dalam project Laravel yang sebelumnya kita sudah buat,
kemudian jalankan perintah di bawah ini untuk melakukan installasi Laravel
Fortify :
composer require laravel/fortify
Jika berhasil, kita akan mendapatkan banyak sekali file-file untuk kebutuhan
Authenticarion di dalam project Laravel kita, diantaranya adalah :
app/Actions/Fortify/
app/config/fortify.php
app/Providers/FortifyServiceProvider.php
//login
Fortify::loginView(function () {
return view('auth.login');
});
//forgot
Fortify::requestPasswordResetLinkView(function () {
return view('auth.forgot-password');
});
//reset
Fortify::resetPasswordView(function ($request) {
return view('auth.reset-password', ['request' => $request]);
});
Kemudian untuk view yang akan kita gunakan untuk mengirim link reset
password yaitu forgot-password.blade.php yang berada di dalam folder auth.
Kurang lebih seperti berikut ini :
//forgot
Fortify::requestPasswordResetLinkView(function () {
return view('auth.forgot-password');
});
Setelah link berhasil dikirim melalui email, maka kita akan melakukan update
password. Dan untuk view yang akan kita gunakan yaitu reset-
password.blade.php yang nanti akan dibuat di dalam folder auth. Kurang lebih
seperti ini :
//reset
Fortify::resetPasswordView(function ($request) {
return view('auth.reset-password', ['request' => $request]);
});
namespace App\Providers;
use App\Actions\Fortify\CreateNewUser;
use App\Actions\Fortify\ResetUserPassword;
use App\Actions\Fortify\UpdateUserPassword;
use App\Actions\Fortify\UpdateUserProfileInformation;
use Illuminate\Support\ServiceProvider;
use Laravel\Fortify\Fortify;
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Fortify::createUsersUsing(CreateNewUser::class);
Fortify::updateUserProfileInformationUsing(UpdateUserProfileInformation::class);
Fortify::updateUserPasswordsUsing(UpdateUserPassword::class);
Fortify::resetUserPasswordsUsing(ResetUserPassword::class);
//register
Fortify::registerView(function () {
return view('auth.register');
});
//login
Fortify::loginView(function () {
return view('auth.login');
});
//forgot
Fortify::requestPasswordResetLinkView(function () {
return view('auth.forgot-password');
});
//reset
Fortify::resetPasswordView(function ($request) {
return view('auth.reset-password', ['request' => $request]);
});
}
}
Pertama, hal yang harus kita lakukan adalah membuat layouts, dimana layout
ini akan digunakan extend dari semua template Auth kita. Silahkan buat folder
baru dengan nama layouts di dalam folder resources/views kemudian di dalam
folder layouts dilahkan buat file baru dengan nama app.blade.php dan silahkan
masukkan kode berikut ini :
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-
fit=no">
Di atas kita menggunakan CSS Bootstrap secara CDN atau online, jadi
pastikan teman-teman semuanya harus terhubung menggunakan internet
saat menjalankan project ini, akan tetapi jika ingin bisa dijalankan secara
offline, silahkan bisa mengunduh file-file CSS dari Bootstrap.
Setelah kita berhasil membuat template untuk layouts, sekarang kita lanjutkan
untuk membuat view untuk halaman register. Silahkan buat sebuah folder
baru dengan nama auth di dalam folder resources/views kemudian di dalam
folder auth silahkan buat file baru dengan nama register.blade.php dan silahkan
masukkan kode berikut ini :
@extends('layouts.app', ['title' => 'Register - SantriKoding.com'])
@section('content')
<div class="col-md-8">
<div class="card border-0 shadow rounded">
<div class="card-body">
<h4 class="font-weight-bold">REGISTER</h4>
<hr>
<form action="{{ route('register') }}" method="POST">
@csrf
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label class="font-weight-bold text-uppercase">Full
Name</label>
<input type="text" name="name" value="{{ old('name') }}"
class="form-control @error('name') is-invalid @enderror" placeholder="Masukkan Nama
Lengkap">
@error('name')
<div class="alert alert-danger mt-2">
{{ $message }}
</div>
@enderror
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="font-weight-bold text-uppercase">Email
address</label>
<input type="email" name="email"
value="{{ old('email') }}" class="form-control @error('email') is-invalid @enderror"
placeholder="Masukkan Alamat Email">
@error('email')
<div class="alert alert-danger mt-2">
{{ $message }}
</div>
@enderror
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="font-weight-bold text-
uppercase">Password</label>
<input type="password" name="password" class="form-
control @error('password') is-invalid @enderror" placeholder="Masukkan Password">
@error('password')
<div class="alert alert-danger mt-2">
{{ $message }}
</div>
@enderror
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label class="font-weight-bold text-uppercase">Konfirmasi
Password</label>
<input type="password" name="password_confirmation"
class="form-control" placeholder="Masukkan Konfirmasi Password">
</div>
</div>
</div>
@endsection
Di atas kita buat view ini menggunakan extends dari layouts app yang sudah
kita buat sebelumnya, dan kita juga definisikan untuk titlenya, kurang lebih
seperti ini :
@extends('layouts.app', ['title' => 'Register - SantriKoding.com'])
Dan untuk semua view register yang kita buat akan kita letakkan di dalam
blade section, dimana ini akan otomatis di render oleh @yield di dalam file
layouts app.
@section('content')
//kode view register ditulis disini
@endsection
Dan untuk action dari form register yang kita buat, akan kita arahkan ke
sebuah route yang bernama register :
<form action="{{ route('register') }}" method="POST">
Dan sekarang jika kita mengisi semua form dan klik REGISTER, maka akan
menampilkan error, sebenarnya kita sudah berhasil melakukan proses
registrasi, error tersebut muncul, karena kita beelum membuat sebuah view
dengan nama home.
Sekarang kita lanjutkan untuk membuat view home, di dalam home kita akan
menampilkan nama user yang berhasil register dan membuat tombol untuk
proses logout. Silahkan buat file baru dengan nama home.blade.php di dalam
folder resources/views dan masukkan kode berikut ini :
@extends('layouts.app')
@section('content')
<div class="col-md-8">
<div class="card border-0 shadow rounded">
<div class="card-body">
Selamat Datang <strong>{{ auth()->user()->name }}</strong>
<hr>
<a href="{{ route('logout') }}" style="cursor: pointer"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();" class="btn btn-md
btn-primary">LOGOUT</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST"
style="display: none;">
@csrf
</form>
</div>
</div>
</div>
@endsection
Di atas kita buat view home ini extends dari file layouts app.
@extends('layouts.app')
Kemudian untuk tampilan home sendiri kita letakkan di dalam blade section.
@section('content')
@endsection
Dan untuk menampilkan data user yang berhasil melakukan register, kita
menggunakan sintaks blade seperti berikut ini :
Selamat Datang <strong>{{ auth()->user()->name }}</strong>
Sekarang jika kira refresh halaman home, maka kurang lebih hasilnya seperti
berikut ini :
Gimana mudah bukan ? membuat proses register di Laravel menggunakan
Laravel Fortify. Di artikel selanjutnya kita semua akan belajar bagaimana cara
membuat fitur login. Terima Kasih
Tutorial Laravel Fortify #5 : Membuat Fitur Login
@section('content')
<div class="col-md-4">
<div class="card border-0 shadow rounded">
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
<h4 class="font-weight-bold">LOGIN</h4>
<hr>
<form action="{{ route('login') }}" method="POST">
@csrf
<div class="form-group">
<label class="font-weight-bold text-uppercase">Email
address</label>
<input type="email" name="email" value="{{ old('email') }}"
class="form-control @error('email') is-invalid @enderror" placeholder="Masukkan
Alamat Email">
@error('email')
<div class="alert alert-danger mt-2">
{{ $message }}
</div>
@enderror
</div>
<div class="form-group">
<label class="font-weight-bold text-uppercase">Password</label>
<input type="password" name="password" class="form-control
@error('password') is-invalid @enderror" placeholder="Masukkan Password">
@error('password')
<div class="alert alert-danger mt-2">
{{ $message }}
</div>
@enderror
</div>
<button type="submit" class="btn btn-primary">LOGIN</button>
<hr>
</form>
</div>
</div>
<div class="register mt-3 text-center">
<p>Belum punya akun ? Daftar <a href="/register">Disini</a></p>
</div>
</div>
@endsection
Di atas, kita buat agar view login ini menggunakan extends dari layouts app.
Kurang lebih seperti ini :
@extends('layouts.app', ['title' => 'Login - SantriKoding.com'])
Dan untuk view login kita letakkan di dalam blade section, dimana ini akan
dirender oleh file layouts app, menggunakan @yeild :
@section('content')
@endsection
Kemudian untuk form action dari login, kita arahkan ke sebuah route yang
bernama login menggunakan method POST
<form action="{{ route('login') }}" method="POST">
Kemudian, jika kita mencoba memasukkan data user yang belum ada di
dalam database, maka akan menampilkan sebuah error, bawah data belum di
temukan di dalam database, kurang lebih seperti berikut ini :
Sekarang silahkan lakukan uji coba dengan data user yang sudah ada di
dalam database, jika berhasil maka akan menampilkan halaman home,
kurang lebih seperti berikut ini :
Di artikel selanjutnya, kita semua akan belajar bagaimana cara membuat fitur
forgot password dengan cara mengirimkan link reset password via email.
Terima Kasih
Dan pada praktek kali ini, kita akan menggunakan Mailtrap untuk mengirim
email-nya. Mailtrap adalah layanan fake email yang digunakan untuk
pengujian tanpa harus mengirimkan ke pengguna email aslinya. Ini akan kita
manfaatkan untuk proses kirim reset password via email.
Sekarang kita lanjutkan untuk membuat halaman view untuk proses forgot
password, silahkan buat file baru dengan nama forgot-password.blade.php di
dalam folder resources/views/auth kemudian masukkan kode berikut ini :
@extends('layouts.app', ['title' => 'Forgot Password - SantriKoding.com'])
@section('content')
<div class="col-md-5">
<div class="card">
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
<div class="form-group">
<label class="font-weight-bold text-uppercase">Email
Address</label>
<input id="email" type="email" class="form-control
@error('email') is-invalid @enderror"
name="email" value="{{ old('email') }}" required
autocomplete="email" autofocus
placeholder="Masukkan Alamat Email">
@error('email')
<div class="alert alert-danger mt-2">
<strong>{{ $message }}</strong>
</div>
@enderror
</div>
Silahkan masukkan email yang sudah digunakan daftar dan jika berhasil
maka kurang lebih tampilannya seperti berikut ini :
Kemudian, silahkan cek Demo Inbox di Mailtrap, maka kita akan mendapatkan
email yang isinya adalah link untuk reset password. Kurang lebih seperti
berikut ini :
Kemudian silahkan klik Reset Password maka kita akan mendapatkan sebuah
error, kurang lebih seperti berikut ini :
Error tersebut muncul karena kita belum membuat view untuk melakukan
reset password.
Sekarang kita lanjutkan untuk membuat view untuk proses reset atau update
password di Laravel Fortify. Silahkan buat file baru dengan nama reset-
password.blade.php di dalam folder resources/views/auth kemudian
masukkan kode berikut ini :
@extends('layouts.app', ['title' => 'Reset Password - SantriKoding.com'])
@section('content')
<div class="col-md-5">
<div class="card">
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
<div class="form-group">
<label class="font-weight-bold text-uppercase">Email
Address</label>
<input id="email" type="email" class="form-control
@error('email') is-invalid @enderror"
name="email" value="{{ $request->email ?? old('email') }}"
required autocomplete="email" autofocus placeholder="Masukkan Alamat Elamil">
@error('email')
<div class="alert alert-danger mt-2">
<strong>{{ $message }}</strong>
</div>
@enderror
</div>
<div class="form-group">
<label class="font-weight-bold text-uppercase">Password</label>
<input id="password" type="password" class="form-control
@error('password') is-invalid @enderror"
name="password" required autocomplete="new-password"
placeholder="Masukkan Password Baru">
@error('password')
<div class="alert alert-danger mt-2">
<strong>{{ $message }}</strong>
</div>
@enderror
</div>
<div class="form-group">
<label class="font-weight-bold text-uppercase">Konfirmasi
Password</label>
<input id="password-confirm" type="password" class="form-control"
name="password_confirmation"
required autocomplete="new-password" placeholder="Masukkan
Konfirmasi Password Baru">
</div>
</div>
</div>
</div>
@endsection
Di atas untuk form action, kita arahkan ke sebuah route yang
bernama password.update.
<form method="POST" action="{{ route('password.update') }}">
Dimana di dalam form ini juga kita menambahkan sebuah input type hidden
untuk menyimpan informasi data Token yang digunakan untuk melakukan
reset password.
<input type="hidden" name="token" value="{{ $request->route('token') }}">
Sekarang kita bisa coba klik Reset Password yaang ada di dalam email, atau
bisa refresh halaman error sebelumnya, jika berhasil, kurang lebih kita akan
mendapatkan sebuah form untuk proses reset atau update password.