Implementasi Passwordless dengan Laravel Validasi User Email
Silakan buka file login.blade.php
yang ada di resources/views/auth/login.blade.php
dan silakan masukkan markup berikut ini:
<x-app-layout>
<div class="container">
<div class="rows">
<div class="col-md-4">
<div class="card">
<div class="card-body">
<h5 class="card-title">Login</h5>
<form method="post" action="{{ route('login') }}">
@csrf
<div class="mb-2">
<label for="email" class="form-label">Email</label>
<input type="email" name="email" id="email" class="form-control">
</div>
<button type="submit" class="btn btn-primary">
Get magic link
</button>
</form>
</div>
</div>
</div>
</div>
</div>
</x-app-layout>
LoginController
Setelah itu, silakan buka terminal Anda untuk membuat 1 controller dengan nama LoginController seperti:
php artisan make:controller Auth/LoginController
Routes
Next, buka file routes/web.php
untuk membuat route login seperti berikut:
use App\Http\Controllers\Auth\LoginController;
use Illuminate\Support\Facades\Route;
Route::get('login', [LoginController::class, 'create'])->name('login');
Route::post('login', [LoginController::class, 'store']);
Setelah itu, Anda bisa buka project ini di browser, http://localhost:8000/login
. Dan pastinya Anda akan melihat error seperti:
Method App\Http\Controllers\Auth\LoginController::create does not exist.
Dan itu hal yang wajar, karena kita belum membuat method create
. Nah karena kita punya 2 method yaitu create
dan store
, maka kita akan membuat method sekaligus. Buka file app/Http/Controllers/Auth/LoginController.php
dan buat method nya seperti berikut:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class LoginController extends Controller
{
public function create()
{
return view('auth.login');
}
public function store(Request $request)
{
//
}
}
Dan setelah itu, silakan refresh kembali di browser. Dan harusnya tampilannya akan sudah seperti ini:
Baik setelah itu, silakan buka file LoginController.php
kembali untuk membuat aksi login nya. Ada beberapa yang harus kita lakukan disini. Seperti validasi email, memastikan bahwa user nya telah terdaftar, dan juga mengirim email. Kita akan mulai satu persatu disini.
Validasi
Pertama, silakan buat validasinya seperti:
public function store(Request $request)
{
$request->validate([
'email' => ['required', 'email', Rule::exists(User::class, 'email')],
]);
// Sending email
// Flash message
// Redirect
}
Perhatikan kode di atas, ada beberapa class yang harus kita use
seperti: Rule
, User
, dan Request
. Silakan import class berikut ini tepat dibawah namespace nya:
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
Nah, setelah itu. Harusnya jika kita kembali ke browser, dan masukkan email yang belum terdaftar, harusnya akan muncul pesan sesuai validasi kita. Namun sebelum itu, silakan buka dulu login.blade.php
untuk memasukkan pesan error nya seperti:
<input type="email" name="email" id="email" class="form-control">
@error('email')
<div class="text-danger mt-1">{{ $message }}</div>
@enderror
User Factory
Nanti kita akan buat form untuk pendaftaran user, untuk sekarang, silakan buka tinker di command line, dan silakan buat 1 user dengan user factory dari laravel seperti:
php artisan tinker
Dan silakan buat user nya seperti:
\App\Models\User::factory()->create();
Jika Anda enter, maka data akan acak, nah untuk data saya kebetulan seperti ini:
= App\Models\User {#6269
name: "Prof. Lyla Lakin MD",
email: "[email protected]",
email_verified_at: "2023-05-02 07:47:04",
#password: "$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi",
#remember_token: "tyyHOhwuMy",
updated_at: "2023-05-02 07:47:04",
created_at: "2023-05-02 07:47:04",
id: 1,
}
Dan itu akan berbeda dengan yang Anda punya. Oleh karena itu, saya sendiri akan test dengan email yang saya dapat yaitu: [email protected]
.