Seputar Pemrograman

Cara Menggunakan Package Sentry Di Framework Laravel Bagian Authentication Dan Login

  24 Oktober 2014     Tutorial Framework Laravel     seputarpemrograman

Akhirnya kita sampai pada tutorial authentication and login pada sentry di framework laravel. Pada tutorial kali ini kita akan membahas bagaimana cara membuat authentication dan login cartalyst sentry di framework laravel. Pada dasarnya komponen yang perlu kita pahami di tutorial ini adalah Sentry::authenticate dan hasAccess. Ingat agar lancar anda mengikuti tutorial ini anda harus mengikuti dari awal tutorial sentry ini. Berikut ini tampilan halaman login yang dibuat menggunakan package cartalyst sentry dan framework laravel.

cartalyst sentry laravel

Pada tutorial sebelumnya kita sudah membahas membuat group dan user. Pada group ketika kita tambah dan ubah group kita juga menambah atau mengubah bagian permissions. Di tutorial group untuk modul seperti masih saya buat manual ( daftar modul dengan checkbox masih manual belum dalam database, baca bagian group). Disitu ada beberapa modul yang saya list User, CRUD Query Builder dan CRUD Eloquent ORM. Lebih jelasnya lihat gambar dibawah ini.

login sentry laravel

Dari gambar diatas kita yang akan kita uji coba di modul bagian CRUD Query Builder. Kalau kita centang read saja misal maka aplikasi bisa diakses untuk membaca saja daftar profile. Jika kita centang read dan create saja, maka aplikasi hanya bisa membaca dan membuat profile baru dan seterusnya.

Kita langsung praktekan saja, buat file bernama login.blade.php letakkan pada folder app/views/sentry. Setelah itu file login.blade.php isikan dengan code dibawah 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>
									@if (Session::has('message'))
							            {{ Session::get('message') }}
							        @endif
									{{ $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 < agar program berjalan dengan benar

Jika selesai simpan, selanjutnya buka UserController.php didalam folder controllers yang telah kita buat sebelumnya dan tambahkan function atau code dibawah ini.

public function login()
{
	return View::make('sentry.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 {

		try
		{
	
			 $credentials = array(
	        'email' 	=> Input::get('email'),
			'password' 	=> Input::get('password')
	    );

	    // digunakan untuk login
	    $user = Sentry::authenticate($credentials, false);
	    	if($user){
	    		return Redirect::to('/');
	    	}

		}
		catch (Cartalyst\Sentry\Users\LoginRequiredException $e)
		{
		    Session::flash('message', 'Login field is required.');
		    return Redirect::to('login')
			->withInput(Input::except('password')); 
		}
		catch (Cartalyst\Sentry\Users\PasswordRequiredException $e)
		{
		    Session::flash('message', 'Password field is required.');
		    return Redirect::to('login')
			->withInput(Input::except('password')); 
		}
		catch (Cartalyst\Sentry\Users\WrongPasswordException $e)
		{
		   	Session::flash('message', 'Wrong password, try again.');
		    return Redirect::to('login')
			->withInput(Input::except('password')); 
		}
		catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
		{
		    Session::flash('message', 'User was not found.');
		    return Redirect::to('login')
			->withInput(Input::except('password')); 
		}
		catch (Cartalyst\Sentry\Users\UserNotActivatedException $e)
		{
		    Session::flash('message', 'User is not activated.');
		    return Redirect::to('login')
			->withInput(Input::except('password')); 
		}

		// The following is only required if the throttling is enabled
		catch (Cartalyst\Sentry\Throttling\UserSuspendedException $e)
		{
		    Session::flash('message', 'User is suspended.');
		    return Redirect::to('login')
			->withInput(Input::except('password')); 
		}
		catch (Cartalyst\Sentry\Throttling\UserBannedException $e)
		{
		    Session::flash('message', 'User is banned.');
		    return Redirect::to('login')
			->withInput(Input::except('password')); 
		}

	}
}

Kemudian pada file filters.php di folder app tambahkan code ini.

// digunakan untuk mengecek apakah user / pengguna sudah login denga benar
Route::filter('sentry_auth',function(){
if(!Sentry::check()){
return Redirect::to('login');
}
});

// digunakan untuk mengecek apakan route / url / halaman yang diakses 
// di user mempunyai hak untuk mengaksesnya
Route::filter('hasAccess', function($route, $request, $value)
{
 try
 {
	$user = Sentry::getUser();
 
	 if( ! $user->hasAccess($value))
	 {
	// jika user tidak mempunyai hak untuk akses maka dikembalikan ke halaman login.
	// ini bisa anda ubah ke error 404 / 503 atau bahkan ke halaman yang anda buat sendiri
	 return Redirect::to('login');
	 }
	 }
	 catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
	 {
	 return Redirect::to('login');
	 }
 
});

Sekarang yang terakhir buka file routes.php didalam folder app. Cari code dibawah ini jika mengikuti dari awal tutorial.

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');

Lalu hapus dan ubah menjadi seperti dibawah ini, jika tidak mengikuti tutorial dari awal bisa menambahkan route seperti ini.

// route digunakan untuk login
Route::get('login', array('uses' => 'UserController@login'));
Route::post('login', array('uses' => 'UserController@doLogin'));
// membuat group route dan sebelum mengakses route didalam group route ini kita 
// harus login terlebih dahulu di tandai dengan code “'before' => 'sentry_auth'”
Route::group(array('before' => 'sentry_auth'), function()
{  

Route::get('crud', array(
// as digunakan untuk penamaan route silahkan dibaca bagian route   
'as' => 'crud.index',
// digunakan untuk mengecek user berhak atau tidak mengakses route ini. Lihat fucntion di filter 
//sebelumnya “hasAccess” dan cqb.read ini adalah permissions atau kalau kita lihat di view group bagian 
//checkbox ada checkbox dengan nama “cqb.read”.
'before' => 'hasAccess:cqb.read',
'uses' => 'CrudController@index'
));

Route::get('crud/create', array(
'as' => 'crud.create',
'before' => 'hasAccess:cqb.create',
'uses' => 'CrudController@create'
));

Route::post('crud/create', array(
'as' => 'crud.store',
'before' => 'hasAccess:cqb.create',
'uses' => 'CrudController@store'
));

Route::get('crud/edit/{id}', array(
'as' => 'crud.edit',
'before' => 'hasAccess:cqb.update',
'uses' => 'CrudController@edit'
));

Route::post('crud/update/{id}', array(
'as' => 'crud.update',
'before' => 'hasAccess:cqb.update',
'uses' => 'CrudController@update'
));

Route::get('crud/destroy/{id}', array(
'as' => 'crud.destroy',
'before' => 'hasAccess:cqb.destroy',
'uses' => 'CrudController@destroy'
));
// route untuk logout
Route::get('logout', array('uses' => 'UserController@logout'));

});

Jika anda mengikuti tutorial ini dari awal, maka anda bisa menambahkan menu logout pada menu sidebar aplikasi ini dengan code dibawah ini.

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

// Hilangkan spasi setelah tanda < agar program bejalan lancar

Selesai dilahkan buat group terlebih dahulu, lalu buat user dan coba jalankan serta pahami apa yang terjadi. Jika ada kendala silahkan komentar dibawah ini. Itulah tutorial cara membuat login menggunakan cartalyst sentry di framework laravel.


comments powered by Disqus

CARI

KATEGORI PEMROGRAMAN

PEMROGRAMAN Terpopuler

PEMROGRAMAN ACAK