Redirect ke URL sebelumnya setelah login di CodeIgniter 4


Redirect ke URL sebelumnya setelah login. Misal URL order mengharuskan untuk login, dan form login ditampilkan. Setelah login, maka otomatis redirect ke halaman sebelumnya yaitu order. Bukan ke halaman default home

Buat filter dengan perintah berikut ini, nama filter bebas

php spark make:filter AuthFilter

Di bagian fungsi before di file app/Filters/AuthFilter.php

public function before(RequestInterface $request, $arguments = null)
{
    // session logged_in yang di set pada proses login
    if (!session()->has('logged_in')) {
        // simpan URL saat ini kedalam session
        session()->set('redirect_url', current_url());

        return redirect('login');
    }
}

Tambahkan alias di bagian config app/Config/Filters.php, nama alias bebas

public array $aliases = [
    // ...
    'auth' => \App\Filters\AuthFilter::class,
];

Di bagian app/Config/Routes.php, tinggal tambahkan filter auth atau sesuai dengan nama filter yang ditambahkan di alias

$routes->get('/order', 'Order::index', ['filter' => 'auth']);

Selanjutnya untuk logic di controller, cukup tambahkan kode untuk mengambil session redirect_url di bagian login berhasil

// app/Controller/Login.php

// ...

if (password_verify($password, $result['password'])) {

    // session logged_in yang digunakan di AuthFilter
    $session_data = array(
        // ...
        'logged_in' => TRUE
    );
    session()->set($session_data);

    // ambil session redirect, jika kosong maka default nya home
    $redirectURL = session()->get('redirect_url') ?? 'home';

    return redirect()->to($redirectURL);
}

Sekarang untuk setiap route dengan filter auth, maka akan di redirect ke URL sebelumnya setelah login

- Iklan -

Jasa bikin web IF Koding