Tutorial 23 Aug 2026 2 Kali Dibaca

Cara Membuat Login Menggunakan Email atau Username di Laravel

Gugun Nurdiansyah
Penulis
Cara Membuat Login Menggunakan Email atau Username di Laravel

Login Email atau Username

Pada sistem login biasa, pengguna mungkin hanya dapat masuk menggunakan email.

Contohnya:

Email    : user@email.com
Password : ********

Namun, sistem juga dapat dibuat agar pengguna menggunakan:

Username : tuan
Password : ********

Atau:

Email    : user@email.com
Password : ********

Satu form dapat menangani keduanya.

1. Pastikan Kolom Username Tersedia

Tabel users perlu memiliki kolom:

id
name
username
email
password

Jika belum ada, buat migration:

php artisan make:migration add_username_to_users_table

Contoh:

Schema::table('users', function (Blueprint $table) {
    $table->string('username')
        ->unique()
        ->after('name');
});

Kemudian:

php artisan migrate

Gunakan unique() agar setiap username hanya dimiliki satu akun.

2. Membuat Form Login

Contoh sederhana:

<form method="POST" action="{{ route('login') }}">
    @csrf

    <label>Email atau Username</label>

    <input
        type="text"
        name="login"
        value="{{ old('login') }}"
        required
    >

    <label>Password</label>

    <input
        type="password"
        name="password"
        required
    >

    <button type="submit">
        Login
    </button>
</form>

Pengguna cukup mengisi satu field:

Email atau Username

3. Validasi Login

Pada controller:

$request->validate([
    'login' => ['required', 'string'],
    'password' => ['required', 'string'],
]);

Kemudian ambil nilai login:

$login = $request->input('login');

4. Tentukan Email atau Username

Gunakan pengecekan sederhana:

$field = filter_var(
    $login,
    FILTER_VALIDATE_EMAIL
)
    ? 'email'
    : 'username';

Jika input berbentuk:

admin@email.com

maka:

field = email

Jika input:

admin

maka:

field = username

5. Proses Login

Gunakan Auth::attempt():

if (Auth::attempt([
    $field => $login,
    'password' => $request->password,
])) {

    $request->session()->regenerate();

    return redirect()->intended(
        '/dashboard'
    );
}

Jika gagal:

return back()->withErrors([
    'login' => 'Email, username, atau password salah.',
])->onlyInput('login');

6. Contoh Controller Lengkap

Contoh sederhana:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

public function login(Request $request)
{
    $request->validate([
        'login' => [
            'required',
            'string',
        ],

        'password' => [
            'required',
            'string',
        ],
    ]);

    $login = $request->input('login');

    $field = filter_var(
        $login,
        FILTER_VALIDATE_EMAIL
    )
        ? 'email'
        : 'username';

    if (Auth::attempt([
        $field => $login,
        'password' => $request->password,
    ])) {

        $request->session()->regenerate();

        return redirect()->intended(
            '/dashboard'
        );
    }

    return back()
        ->withErrors([
            'login' =>
                'Email, username, atau password salah.',
        ])
        ->onlyInput('login');
}

7. Route Login

Tambahkan route:

Route::get(
    '/login',
    [AuthController::class, 'showLogin']
)->name('login');

Route::post(
    '/login',
    [AuthController::class, 'login']
);

Method untuk menampilkan halaman:

public function showLogin()
{
    return view('auth.login');
}

8. Pastikan Password Menggunakan Hash

Password jangan disimpan sebagai teks biasa.

Saat membuat user:

use Illuminate\Support\Facades\Hash;

User::create([
    'name' => 'Administrator',
    'username' => 'admin',
    'email' => 'admin@example.com',
    'password' => Hash::make(
        'password123'
    ),
]);

Laravel akan menggunakan hashing password untuk proses autentikasi.

9. Logout

Buat route:

Route::post(
    '/logout',
    [AuthController::class, 'logout']
)->name('logout');

Controller:

public function logout(Request $request)
{
    Auth::logout();

    $request->session()->invalidate();

    $request->session()->regenerateToken();

    return redirect('/login');
}

10. Keamanan Login

Login email atau username tetap harus menggunakan praktik keamanan standar.

Gunakan:

  1. Password hashing.

  2. CSRF protection.

  3. Session regeneration.

  4. Rate limiting.

  5. Validasi input.

  6. HTTPS.

  7. Permission dan role.

  8. Logout yang benar.

Jangan memberikan informasi terlalu spesifik ketika login gagal.

Hindari pesan seperti:

Username ditemukan, tetapi password salah.

Lebih baik:

Email, username, atau password salah.

Hal ini mengurangi risiko username enumeration.

11. Tambahkan Rate Limiting

Login sebaiknya memiliki pembatasan percobaan agar tidak mudah menjadi target brute-force.

Pada Laravel modern, rate limiter dapat dikonfigurasi menggunakan RateLimiter.

Contoh konsep:

RateLimiter::for('login', function (
    Request $request
) {
    return Limit::perMinute(
        5
    )->by(
        strtolower(
            $request->input('login')
        ) . '|' .
        $request->ip()
    );
});

Kemudian terapkan limiter pada route login sesuai mekanisme routing aplikasi.

Batas sebenarnya dapat disesuaikan dengan kebutuhan sistem.

12. Login untuk Sistem Multi-Cabang

Fitur ini juga dapat dikembangkan untuk aplikasi multi-cabang.

Contohnya:

Username : admin.bekasi
Password : ********

Setelah login:

User
↓
Role
↓
Cabang
↓
Dashboard Cabang

Data user dapat memiliki:

user_id
branch_id
role_id

Sehingga sistem dapat menentukan data yang boleh diakses pengguna.

13. Login Berdasarkan Email atau Username untuk API

Konsep yang sama dapat digunakan pada API Laravel.

Contohnya:

{
    "login": "admin",
    "password": "password123"
}

Backend menentukan apakah login berisi email atau username.

Setelah berhasil, aplikasi dapat memberikan token menggunakan mekanisme autentikasi API yang digunakan aplikasi, misalnya Laravel Sanctum.

Kesalahan yang Perlu Dihindari

Username Tidak Unique

Gunakan:

$table->string('username')->unique();

Password Tidak Di-hash

Jangan menyimpan:

password123

langsung ke database.

Gunakan:

Hash::make($password);

Tidak Regenerate Session

Setelah login berhasil:

$request->session()->regenerate();

Tidak Menggunakan Rate Limit

Login tanpa pembatasan percobaan lebih rentan terhadap brute-force.

Pesan Error Terlalu Detail

Gunakan pesan umum ketika kredensial salah.

Login Laravel Bersama Ovla Media

Ovla Media dapat membantu mengembangkan sistem autentikasi Laravel untuk:

  1. Login email atau username.

  2. Role dan permission.

  3. Sistem multi-cabang.

  4. Login administrator.

  5. Laravel Sanctum.

  6. API authentication.

  7. Two-factor authentication.

  8. Reset password.

  9. Session management.

  10. Aplikasi bisnis custom.

Sistem login dapat disesuaikan dengan kebutuhan aplikasi seperti Point of Sales, klinik, inventory, koperasi, CRM, maupun sistem internal perusahaan.

Kesimpulan

Login menggunakan email atau username dapat dibuat dengan satu field input.

Alurnya:

User memasukkan login
        ↓
Cek apakah email
        ↓
Email → cari berdasarkan email
        ↓
Bukan email → cari berdasarkan username
        ↓
Validasi password
        ↓
Login berhasil

Kunci implementasinya adalah menentukan field berdasarkan input pengguna dan kemudian menggunakan Auth::attempt() untuk proses autentikasi.

Untuk production, jangan lupa menerapkan hashing password, HTTPS, CSRF protection, session regeneration, rate limiting, dan pesan error yang aman.

#Login Laravel #Login Email Username Laravel #Laravel Authentication #Laravel Auth #Laravel Login #Username Laravel #Email Login Laravel #Laravel Security #Laravel Sanctum #Role Permission Laravel #Laravel Multi-Cabang #PHP Laravel #Laravel Session #Laravel Password #Brute Force Protection #Web Development #Aplikasi Laravel #Ovla Media #Jasa Laravel #Jasa Pembuatan Aplikasi
Beranda Produk Artikel
Konsultasi
OVLA

Navigasi Utama

Hubungi Kami

Mulai Konsultasi Sekarang