Membuat Modul Login Sederhana di Laravel 4

Membuat Modul Login Sederhana di Laravel 4

Aplikasi yang kita buat membutuhkan 'authtentication', minimal untuk administrator yang mengelola konten website kita/admin website. Pada tulisan ini saya ingin share cara membuat modul login sederhana untuk website yang kita buat. Sederhana disini bukan berarti low security dan mudah di jebol, sederhana disini modul login yang kita buat hanya satu level kewenangan yaitu kewenangan sebagai pengelola website/admin. Modul login sederhana ini menggunakan Laravel 4, karena kebetulan source code yg saya punya laravel 4.

Okay langsung aja tutorialnya:

1. Buat tabel users dan isi dengan dummy user

Buat tabel users, tabel ini yang akan menampung data user yang diberikan akses untuk mengelola konten, sruktur databasenya bisa di lihat di bawah ini.

untuk membuat tabel ini bisa menggunakan 'migrations' dan 'seeding' via artisan, tergantung enaknya aja. Misal kita add data user dummy dengan hash md5 atau bisa juga membuat dummy user dengan hash bawaan laravel Hash:make('password')

2. Buat Route untuk modul Login

Route::get('dashboard','UserController@welcomePage');
Route::get('login',array('as'=>'login','uses'=>'UserController@showLogin'))
Route::post('login', 'UserController@doLogin');
Route::get('logout', array('as' => 'logout', function () {
    Auth::logout();

    return Redirect::route('login')
        ->with('flash_notice', 'You are successfully logged out.');
}))

Penjelasan Route diatas adalah sebagai berikut:
1. Route dashboard method 'get' = halaman yang dapat diakses setelah user login

2. Route login method 'get' = berfungsi untuk menampilkan halaman login

3. Route login method 'post' = berfungsi untuk menangkap data yang di post oleh halaman login

4. Route logout method 'get' = berfungsi untuk mengeksekusi modul logout

3. Buat User Controller dan Buat 2 Method (welcomePage & showLogin)




class UserController extends \BaseController {

	/**
	 * Display a listing of the resource.
	 *
	 * @return Response
	 */
	public function welcomePage()
	{
		//jika berhasi login tampilkan halaman dashboard ini
		return View::make('dashboard');
	}
    //tampilkan form login
	public function showLogin()
	{
	    // show the form
		return View::make('form_login');
	}

	
}


Jika anda membuat table 'users' menggunakan artisan migrations akan otomatis membuat model users, akan tetapi, jika anda membuat table user manual maka buat lah model users seperti di bawah ini:


use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;

class User extends Eloquent implements UserInterface, RemindableInterface {

	use UserTrait, RemindableTrait;

	/**
	 * The database table used by the model.
	 *
	 * @var string
	 */
	protected $table = 'users';

	/**
	 * The attributes excluded from the model's JSON form.
	 *
	 * @var array
	 */
	protected $hidden = array('password', 'remember_token');

}

4. Buat View untuk Login Form :

Form login dibuat menggunakan template blade, scriptnya sebagai berikut:

{{ Form::open(array('url' => 'login')) }}
{{ $errors->first('email') }}
{{ $errors->first('password') }}
{{ Form::label('email', 'Email Address') }}
{{ Form::text('email', Input::old('email'), array('placeholder' => 'awesome@awesome.com')) }}
{{ Form::label('password', 'Password') }}
{{ Form::password('password') }}
{{ Form::submit('Submit!') }}
{{ Form::close() }}

5. Edit UserController.php Buat Method Proses Login (doLogin())

public function doLogin()
	{

		// proses form
		// validasi data yang dinput ke form
		$rules = array(
		    'email'    => 'required|email', // pastikan format email benar
		    'password' => 'required|alphaNum|min:3' // format password
		);

		// jalankan validasi
		$validator = Validator::make(Input::all(), $rules);

		// jika validasi gagal
		if ($validator->fails()) {
		    return Redirect::to('login')
		        ->withErrors($validator) // kembalikan error ke form login
		        ->withInput(Input::except('password')); // kecuali data password
		} else {

		    // jika validasi berhasil, ambil data email dan password
		    $userdata = array(
		        'email'     => Input::get('email'),
		        'password'  => Input::get('password')
		    );

		    // lakukan login dengan mengecek ke database table users
		    if (Auth::attempt($userdata)) {

		        // jika validasi sukses arahkan halaman ke welcomePage
		       
		        return Redirect::to('dashboard');

		    } else {

		        // jika gagal kembalikan ke halaman login
		        return Redirect::to('login');

		    }

		}
	}

script diatas untuk memproses inputan email dan password yang di post oleh user. untuk pengecekan ke database apakah user sudah terdaftar dan password benar. Kita tinggal menggunakan method "Auth::attempt($userdata)", method ini akan mengecek inputan user ke database jika valid maka akan mengembalikan nilai true dan sebaliknya jika salah nilai yang dikembalikan false.

Silahkan jalankan aplikasi, coba masukan nilai valid (username & passwordnya) aplikasi akan mengarahkan ke halaman 'dashboard' dan sebaliknya jika salah akan mengarahkan ke halaman 'login'. Jika sudah berhasil masuk ke step selanjutnya memasang security/filter disetiap modul yang ingin kita proteksi. Sampai step 5 kita belum memasangkan filter/security otomatis halaman 'dashboard' dapat diakses tanpa login ataupun sudah login. Untuk menambahkan security pada halaman dashboard bisa dilihat dilangkah selanjutnya.

6. Membuat Filter

Kita akan membuat security sederhana, edit filter.php tambahkan kode berikut:

Route::filter('auth', function()
{
	if (Auth::guest())
	{
		if (Request::ajax())
		{
			return Response::make('Unauthorized', 401);
		}
		else
		{
			return Redirect::route('login')
                        ->with('flash_error', 'You must be logged in to view this page!');
		}
	}
});

Route::filter('guest', function()
{
	if (Auth::check())
	return Redirect::route('dashboard')
											 ->with('flash_notice', 'You are already logged in!');
});

Filter auth mengecek, jika auth yang terima masuk kategori 'guest' maka halaman akan di arahkan ke route'login' , filter ini berguna untuk diaplikasikan pada modul yang ingin diproteksi atau menghasuskan login jika ingin mengaksesnya.

Filter 'guest' berfungsi untuk diaplisikan pada halaman login form, jadi jika statusnya udah login maka akan langsung di arahkan saja ke halaman 'dashboard'.

7. Aplikasikan Filter yang telah dibuat pada file Route untuk memproteksi method

Modifikasi script route.php tambahkan filter:

Route::get('dashboard',array('as'=>'home','uses'=>'UserController@index'))->before('auth');
Route::get('login',array('as'=>'login','uses'=>'UserController@showLogin'))->before('guest');
Route::post('login', 'UserController@doLogin');
Route::get('logout', array('as' => 'logout', function () {
    Auth::logout();

    return Redirect::route('login')
        ->with('flash_notice', 'You are successfully logged out.');
}))->before('auth');

Finally, modul login sederhana yang kita buat telah selesai. Dipostingan selanjutnya saya akan mengembangkan modul login sederhana ini dengan menambahkan auth berjenjang dengan jenis kewenangan user yang berbeda.