Seputar Pemrograman

Memanfaatkan Auth Bawaan Laravel Untuk Membuat Authentication User Sederhana

  03 Oktober 2014     Tutorial Framework Laravel     seputarpemrograman

Authentication yang akan dibahas disini yaitu auth basic atau dasar bukan berbasis ACL (Access Control List) maupun RBAC (Role Based Access ControL). Di Framework laravel sudah disediakan komponen atau fungsi -  fungsi yang kita perlukan untuk membuat authentication. Sebelum membahasa lebih jauh tentang auth laravel, kita harus paham apa itu auth. Auth dalam aplikasi adalah digunakan untuk membatasi user tertentu dalam mengakses aplikasi atau program bahkan menu tertentu. Dalam membuat auth kita biasanya memerlukan form login yang berisi inputan username atau email dan password. Sebelum belajar membuat auth akan saya perkenalan dahulu fungsi – fungsi auth yang ada dilaravel.

 

Fungsi Dasar Auth

1. Password

Di laravel secara default password disimpan dengan metode hash menggunakan Bcrypt.

Berikut ini adalah code untuk membuat password menggunakan metode Hash

$password = Hash::make('secret');

Untuk mengecek password sama atau tidak anda bisa menggunakan code dibawah ini.

if (Hash::check('secret', isikanpasswordyangtelahdihash))
{

}

Kalau code dibawah ini cek password rehashed.

if (Hash::needsRehash($hashed))
{

    $hashed = Hash::make('secret');

}

2. Authenticating Users

Untuk masuk dalam aplikasi anda bisa menggunakan metode atau code dibawah ini.

if (Auth::attempt(array('email' => $email, 'password' => $password)))
{

    return Redirect::intended('dashboard');

}

Sedangkan untuk mengecek apakah pengguna sudah benar – benar login bisa menggunakan code dibawah ini.

if (Auth::check())
{

}

Kalau kita lihat biasanya disebuah form login ada checkbox dengan atribut remember me atau ingat saya, untuk dilaravel anda bisa menggunakannya seperti ini.

if (Auth::attempt(array('email' => $email, 'password' => $password), true))
{

}

Untuk mengecek apakah remember me atau ingat saya sudah bekerja apa belum ada bisa mencoba dengan menuliskan code dibawah ini.

if (Auth::viaRemember())
{

}

Pada suatu ketika anda membuat website, dalam website anda ada beberapa status user ada yang aktif, ada yang belum di konfirmasi, ada juga yang telah di banned karena melakukan suatu kesalahan. Ketika mereka yang dibanned ataupun belum dikonfirmasi tidak bisa login kita bisa menggunakan code dibawah ini.

if (Auth::attempt(array('email' => $email, 'password' => $password, 'active' => 1)))
{

}

Untuk mengakses data user yang telah login bisa menggunakan seperti ini.

$email = Auth::user()->email;

Atau untuk id bisa seperti ini

$id = Auth::id();

Sedangkan untuk logout anda bisa menggunakan code atau fungsi ini.

Auth::logout();

Itu adalah fungsi – fungsi yang bisa kita manfaatkan untuk membuat auth sederhana dan masih banyak fungsi yang belum saya bahas disini. Jadi silahkan dibaca baca di http://laravel.com/docs/4.2/security.

 

Belajar Membuat Auth Sederhana

halaman login auth laravel

Ditutorial ini kita akan belajar membuat auth sederhana. Langkah awal yaitu konfigurasi file database.php didalam folder app/config. Buat database dan dengan tabel bernama users. Disini saya memanfaatkan migration yang ada dilaravel dan juga sudah kita bahas ditutorial sebelumnya.

Jalankan perintah ini didalam command prompt / cmd.

php artisan migrate:make create_users_table

Untuk lebih jelasnya silahkan dilihat gambar dibawah ini.

migrate user tabel

Cd \xampp\htdocs\projectlaravel, digunakan untuk mengalihkan atau mengarahkan ke folder projectlaravel

php artisan migrate:make create_users_table, digunakan untuk membuat migration

Jika sukses maka akan dengan sendirinya akan dibuatkan file bernama tanggal_create_users_tabel.php didalam folder app/database/migrations. Buka file tersebut dan isikan perintah atau code dibawah ini.

public function up()
{
	Schema::create('users', function(Blueprint $table)
	{
		$table->increments('id');
		$table->string('name', 50);
		$table->string('username', 50);
		$table->string('email', 300);
		$table->string('password', 100);
        $table->string('remember_token', 100)->nullable();
		$table->timestamps();
	});
}

public function down()
{
	Schema::drop('users');
}

Jika selesai simpan dan di command prompt / cmd silahkan jalankan perintah ini.

php artisan migrate

Lebih jelasnya lihat gambar dibawah ini.

artisan migrate user tabel 

Disini saya juga memanfaatkan seeder lavarel fungsinya untuk membuat / memasukan data dibuat untuk testing aplikasi atau web yang dibuat. Buat file bernama UserTableSeeder.php didalamfolder app/seeds dan isikan code dibawah ini.

< ?php

class UserTableSeeder extends Seeder
{

	public function run()
	{
		DB::table('users')->delete();
		User::create(array(
			'name'     => 'Andri Riantana',
			'username' => 'seputarpemrograman',
			'email'    => 'seputarpemrograman@gmail.com',
			'password' => Hash::make('qwerty'),
		));
	}

}

// Hilangkan spasi setelah tanda <

Kemudian buka file DatabaseSeeder.php yang berada di app/seeds ubah codenya menjadi seperti ini.

public function run()
{
	Eloquent::unguard();

	$this->call('UserTableSeeder');
}

Selesai silahkan bukan command prompt dan jalankan perintah berikut ini.

php artisan db:seed

Berikut ini saya sertakan gambarnya.

user tabel seeder

Jika berhasil sampai langkah ini maka didatabase anda sudah terdapat tabel bernama users dan beserta isinya.

Jika anda masih bingung membuat tabel dengan cara diatas anda bisa membuat secara manual dengan struktur tabel seperti dibawah ini.

struktur tabel users

Berikut juga saya sertakan sql / query nya

CREATE TABLE IF NOT EXISTS `users` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

  `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,

  `username` varchar(50) COLLATE utf8_unicode_ci NOT NULL,

  `email` varchar(300) COLLATE utf8_unicode_ci NOT NULL,

  `password` varchar(100) COLLATE utf8_unicode_ci NOT NULL,

  `remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,

  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',

  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
INSERT INTO `users` (`id`, `name`, `username`, `email`, `password`, `remember_token`, `created_at`, `updated_at`) VALUES

(1, 'Andri Riantana', 'seputarpemrograman', 'seputarpemrograman@gmail.com', '$2y$10$5XyoNvbr2mS5I9yCxOpzSODirKC44HgT7xGcYJYCA5D3YT3KXsREu', 'Eq5sI4kijZlws93D5ItShaULr7tAyOeLxwlodALakiQiUQ2jFE16YL7EMYgq', '2014-10-03 11:34:32', '2014-10-03 11:56:17');

Selanjutnya buat file bernama UserController.php letakkan didalam folder app/controllers dan isikan code dibawah ini.

< ?php

class UserController extends \BaseController {

	public function login()
    {
                    return View::make('login');
    }

    public function doLogin()
    {
        $rules = array(
                        'email'    => 'required|email',
                        'password' => 'required|alphaNum|min:5'
        );
        $validator = Validator::make(Input::all(), $rules);
        if ($validator->fails()) {
                        return Redirect::to('login')
                                        ->withErrors($validator)
                                        ->withInput(Input::except('password'));
        } else {
                        $userdata = array(
                                        'email'   => Input::get('email'),
                                        'password'          => Input::get('password')
                        );
                        if (Auth::attempt($userdata)) {
                                        return Redirect::to('/');
                        } else {                
                                        return Redirect::to('login');
                        }
        }
    }

    public function logout()
    {
        Auth::logout();
        return Redirect::to('login');
    }

}

//Hilangkan spasi setelah tanda <

 Buat file lagi bernama login.blade.php letakkan di folder app/views dan isikan code ini.

< !DOCTYPE html>
< html lang="en">
< head>
< title>Halaman Login< /title>
{{ HTML::style('assets/css/bootstrap.min.css') }}
{{ HTML::style('assets/css/sb-admin.css') }}
{{ HTML::style('assets/font-awesome-4.1.0/css/font-awesome.min.css') }}
< /head>
< body>
    < div class="row">
        < div class="col-lg-4 text-center">
        < /div>
        < div class="col-lg-4 text-center">
            < div class="panel panel-default">
                < div class="panel-body">
                    {{ Form::open(array('url' => 'login')) }}
                    < h1>Login< /h1>
                    < p>
                                    {{ $errors->first('email') }}
                                    {{ $errors->first('password') }}
                    < /p>
                    < p>
                                    {{ Form::label('email', 'Email') }}
                                    {{ Form::text('email', Input::old('email'), array('class' => 'form-control','placeholder'=>'Masukkan Email')) }}
                    < /p>
                    < p>
                                    {{ Form::label('password', 'Password') }}
                                    {{ Form::password('password', array('class' => 'form-control','placeholder'=>'Masukkan Password')) }}
                    < /p>
                    < p>{{ Form::submit('Login', array('class' => 'form-control')) }}< /p>
                {{ Form::close() }
                < /div>
            < /div>
        < /div>
        < div class="col-lg-4 text-center">
        < /div>
< /div>
< /body>
< /html>

// Hilangkan spasi setelah tanda <

Selanjutnya buka file routes.php yang berada dalam folder app. Dan tambahkan code dibawah ini.

Route::group(array('before' => 'auth'), function()
{
Route::get('logout', array('uses' => 'UserController@logout'));

// Route yang ingin diproteksi taruh disini
});

Route::get('login', array('uses' => 'UserController@login'));
Route::post('login', array('uses' => 'UserController@doLogin'));

Jika anda mengikuti tutorial ini dari awal anda bisa tuliskan code seperti ini.

Route::group(array('before' => 'auth'), function()
{
Route::get('/', 'ProfileController@index');
Route::get('profile/{nama}', 'ProfileController@profile');
Route::get('profile/{id}/{nama}', 'ProfileController@profileview');
Route::get('profile/{nama?}', function($nama = null)
{
    return $nama;
});

Route::get('profile/{nama?}', function($nama = 'Andri')
{
    return $nama;
});

Route::get('formsederhana', 'ProfileController@formsederhana');
Route::post('formsederhana', 'ProfileController@postformsederhana');
Route::get('crud', 'CrudController@index');
Route::get('crud/create','CrudController@create');
Route::post('crud/create','CrudController@store');
Route::get('crud/edit/{id}', 'CrudController@edit');
Route::post('crud/update/{id}', array('as' => 'crud.update', 'uses' => 'CrudController@update'));
Route::get('crud/destroy/{id}','CrudController@destroy');
Route::resource('ivud', 'IvudController');
Route::get('logout', array('uses' => 'UserController@logout'));
});

Route::get('login', array('uses' => 'UserController@login'));
Route::post('login', array('uses' => 'UserController@doLogin'));

Yang terakhir pastikan ada file bernama User.php  didalam folder app/models. Sekarang coba jalankan dengan mengetikan url seperti ini.

http://localhost/projectlaravel/public/login

Untuk username / email : seputarpemrograman@gmail.com
Password : qwerty

Oh ya jika anda mengikuti tutorial ini dari awal tambahkan code dibawah ini dalam file sidebar.blade.php dalam folder app/views/includes.

< li>
    < a href="{{ URL::to('logout') }}">< i class="fa fa-fw fa-power-off">< /i> Logout< /a>
< /li>

// Hilangkan spasi setelah tanda <

Jika anda sudah login akan menampilkan halaman seperti gambar dibawah ini.

halaman home auth laravel

Itulah cara membuat auth sederhana dalam framework laravel, mungkin anda akan sedikit bingung dengan tutorial diatas jika anda tidak mengikuti tutorial tentang laravel dari awal.


comments powered by Disqus

CARI

KATEGORI PEMROGRAMAN

PEMROGRAMAN Terpopuler

PEMROGRAMAN ACAK