Bagaimana cara menyembunyikan formulir login setelah mencapai total upaya login yang gagal?

Saya ingin menyembunyikan formulir login dan malah menampilkan pesan kesalahan, tetapi tidak bisa.

Saya mencoba meletakkan kode di bawah ini yang menulis ulang tindakan pada pengontrol yang menampilkan formulir, tetapi metode yang memeriksa terlalu banyak upaya masuk sepertinya tidak berfungsi dan tidak pernah mengembalikan nilai true.

public function showLoginForm(Request $request)
{
    if (method_exists($this, 'hasTooManyLoginAttempts') &&
        $this->hasTooManyLoginAttempts($request) ) {
            $seconds = $this->limiter()->availableIn($this->throttleKey($request));
            return view('auth.block', array(
                'seconds' => $seconds
            ));
    }

    return view('auth.login');
}

Saya mengelola proses otentikasi dengan php artisan make: auth login controller adalah default yang dihasilkan oleh Laravel, satu-satunya perubahan adalah pada tindakan yang menampilkan formulir.


person Rafael Paulino    schedule 13.08.2019    source sumber


Jawaban (2)


Melihat kode Laravel, ia memeriksa hasTooManyLoginAttempts berdasarkan throttleKey dan maxAttempts.

throttleKey bergantung pada email dan alamat IP pengguna. Jadi keluaran dari kode berikut adalah seperti: [email protected]|127.0.0.1 dan itu adalah throttleKey Anda.

protected function throttleKey(Request $request)
{
    return Str::lower($request->input($this->username())).'|'.$request->ip();
}

Sekarang Laravel mendapatkan email pengguna (nama pengguna) dari $request->input($this->username()) ketika Anda mengirim permintaan POST, yang tidak dapat Anda akses dalam metode showLoginForm karena dipanggil pada permintaan GET.

Bagaimanapun, jika Anda ingin memblokir formulir login, Anda harus membuat throttleKey unik Anda sendiri dan kemudian mengganti metodenya. Katakanlah Anda ingin throttleKey Anda hanya didasarkan pada alamat IP - hal ini tidak disarankan. Inilah cara Anda melakukannya:

// In LoginController.php 

protected function throttleKey(Request $request)
{
    return $request->ip();
}
person Ahmad H.    schedule 13.08.2019

Fungsi hasTooManyLoginAttempts() membutuhkan, di $request, username (biasanya email) sebagai kunci untuk mengetahui apakah user telah mencapai upaya login maksimalnya.

Jika, dalam $request, tidak ada username dengan nilai, fungsi tidak dapat memverifikasi user upaya login.

Jadi Anda tidak bisa benar-benar mengetahui siapa pengguna yang ingin get formulir login Anda, Anda hanya tahu siapa yang setelah dia mengirimkan formulir.

IMHO satu-satunya cara adalah dengan menambahkan parameter username ke permintaan GET tetapi Anda harus menyediakan beberapa solusi: cookie, sesi, dll.

person dparoli    schedule 13.08.2019