Mengubah Redirect URL Setelah Login atau Logout di Laravel 5.3


Hanya dengan menjalankan dua perintah artisan yaitu php artisan make:auth dan php artisan migrate, maka kalian sudah dapat menggunakan modul autentikasi pada Laravel. Betapa terbantunya kalian dengan generator tersebut, sehingga produktivitas dalam pengembangan pun meningkat.

Dengan menjalankan built-in server, kalian dapat mengakses URI /register untuk mendaftar sebagai user baru. Atau mengakses URI /login untuk masuk ke halaman manajemen apabila sudah terdaftar sebagai user.

Jika diperhatikan, baik setelah daftar maupun login, apabila sukses, maka akan diarahkan ke URI /home. Seandainya kalian punya controller sendiri, dan ingin mengarahkannya ke sana apabila berhasil login atau daftar, bagaimana caranya?

Redirect After Logged In

Buka berkas app/Http/Controllers/Auth/LoginController.php, dan ubah properti $redirectTo sesuai dengan yang kalian inginkan.

<?php
 
namespace App\Http\Controllers\Auth;
 
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
 
class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */
 
    use AuthenticatesUsers;
 
    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/user/dashboard';
 
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest', ['except' => 'logout']);
    }
}

Jika ingin mengarahkan ke URL dengan route berbasis nama, maka kita bisa meletakkan definisinya di dalam method __construct().

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->redirectTo = route('index');
    $this->middleware('guest', ['except' => 'logout']);
}

Redirect If Not Authenticated

Jika contoh di atas mengarahkan ke URL tertentu apabila berhasil login, potongan script di bawah akan mengarahkan ke URL tertentu apabila user mengakses halaman tertentu yang membutuhkan autentikasi login.

Secara bawaan, apabila kalian mengakses suatu halaman yang membutuhkan autentikasi, maka akan diarahkan ke URI /login untuk verifikasi autentikasi terlebih dahulu. Jika kalian punya URI login yang berbeda, semisal /user/login, dengan mudah kalian dapat mengarahkan user ke laman tersebut apabila belum login.

Buka berkas app/Exceptions/Handler.php, dan ubah script redirect dalam method unauthenticated() seperti di bawah.

/**
 * Convert an authentication exception into an unauthenticated response.
 *
 * @param \Illuminate\Http\Request                 $request
 * @param \Illuminate\Auth\AuthenticationException $exception
 *
 * @return \Illuminate\Http\Response
 */
protected function unauthenticated($request, AuthenticationException $exception)
{
    if ($request->expectsJson()) {
        return response()->json(['error' => 'Unauthenticated.'], 401);
    }
 
    return redirect()->guest('user/login');
}

Redirect After Logged Out

kalian juga dapat menentukan arah URL yang akan dituju apabila user berhasil keluar dari sistem (logout). Cara yang digunakan untuk logout sedikit berbeda dengan yang di atas.

Buka berkas pada path berikut:

vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php

Dalam trait AuthenticateUser.php terdapat method logout() yang berisi beberapa perintah untuk menghapus sesi (session) dan secara bawaan mengalihkan URL ke halaman login.

Tentunya, bukan langkah bijak mengubahnya langsung pada berkas tersebut. Maka dari itu, kalian akan menambahkan method dengan nama yang sama, yaitu logout() pada berkas app/Http/Controller/Auth/LoginController.php. Potongan skripnya dapat dilihat di bawah.

<?php
 
namespace App\Http\Controllers\Auth;
 
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
 
class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */
 
    use AuthenticatesUsers;
 
    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/home';
 
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->redirectTo = route('index');
        $this->middleware('guest', ['except' => 'logout']);
    }
 
    /**
     * Log the user out of the application.
     *
     * @param  Request  $request
     * @return \Illuminate\Http\Response
     */
    public function logout(Request $request)
    {
        $this->guard()->logout();
 
        $request->session()->flush();
 
        $request->session()->regenerate();
 
        return redirect('user/login')
            ->withSuccess('Terimakasih, selamat datang kembali!');
    }
}

 

Tak Berkategori

Yugo Purwanto

Pemrogram PHP dan JavaScript yang sedang sibuk mengembangkan aplikasi Glosarium Bahasa Indonesia.

1 comment

Tinggalkan Balasan