Matawebsite Promo Lebaran 2022

Laravel Auth: Login Dengan Email Atau Username ( Dalam satu field )

date 02 Jan 2022
date Lev Yasin
date 3088
date Web Programming
Laravel Auth: Login Dengan Email Atau Username ( Dalam satu field )

Tip cepat untuk kalian. Bagaimana jika dalam proyek Kita pengguna dapat login tidak hanya dengan email tetapi juga dengan beberapa bidang lain, seperti "username" atau "user_id" atau apa pun? Secara default Laravel hanya mengizinkan satu bidang seperti 'email'. Itu sebenarnya mudah untuk diubah.

Bayangkan Kita sudah memiliki username bidang di tabel pengguna Kita dan perlu memeriksa hasil Form masuk. Jadi hanya ada dua kolom input – login dan password. Dan login dapat berupa email atau username. Bagaimana kita bisa memeriksa keduanya?

Kita perlu menambahkan beberapa kode ke dalam file app/Http/Auth/LoginController.php dan mengganti metode login() :

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

    $login_type = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL ) 
        ? 'email' 
        : 'username';

    $request->merge([
        $login_type => $request->input('login')
    ]);

    if (Auth::attempt($request->only($login_type, 'password'))) {
        return redirect()->intended($this->redirectPath());
    }

    return redirect()->back()
        ->withInput()
        ->withErrors([
            'login' => 'These credentials do not match our records.',
        ]);
    } 

}

Mari kita lihat sedikit lebih dalam:

$login_type = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL ) 
  ? 'email' 
  : 'username';

Baris kode ini memeriksa apakah pengguna memasukkan email atau string lain - yang kemudian ditafsirkan sebagai username.

$request->merge([
    $login_type => $request->input(‘login')
]);

Yang ini menambahkan variabel ke dalam array $request – secara default kita memiliki variabel 'login', tapi yang sebenarnya kita butuhkan adalah 'email' atau 'username' – jadi itu dimasukkan di sini.

if (Auth::attempt($request->only($login_type, 'password'))) {
    return redirect()->intended($this->redirectPath());
}

Dan akhirnya kami memeriksa kredensial, tetapi hanya kredensial yang kami butuhkan – berasal dari variabel $login_type .

Sederhana, bukan?

Matawebsite Promo
lev_yasin.png

Lev Yasin

Instruktur Web Programming Mataweb

Sangat tertarik dengan dunia Pemrograman Web & Mobile, saat ini fokus pada bagian Backend Web Developer, menggunakan PHP sebagai bahasa pemrograman utama, biasanya saya menggunakan Laravel.

Artikel Populer

Halo, ada yang bisa kami bantu?
Daftar Sekarang