آموزش لاراول – پکیج sentry

  • خانه
  • آموزش لاراول – پکیج sentry
Image تحقیقات

آموزش لاراول – پکیج sentry

با سلام خدمت همه دوستان عزیز که علاقه به PHP  و فریم ورک محبوب لاراول رو دارن.

خب برای امروز میخوایم یک پکیج عالی رو معرفی کنم به نام Sentry. این پکیج در واقع برای مدیریت و ثبت نام کاربران و همچنین احراز هویت و ورود خروج مدیر و کاربران طراحی شده.

قبلا ما احراض هویت و لاگین کردن رو با استفاده از توابع و کلاس های فریم ورک Laravel انجام میدادیم ولی امروز این کار رو با پکیج sentry پیش می بریم.

 

خب برای شروع باید این پکیج رو ، روی لاراول نصب کنید.همان طور که میدونید برای نصب پکیج روی فریم ورک لاراول باید مراحل زیر رو انجام بدیم :

1- فایل composer.json که در روت فریم ورک لاراول می باشد رو باز کنید و در بخش require ها ، نام پکیج مورد نظر را وارد می کنیم.در این جا نام پکیج امون این است :

"cartalyst/sentry": "2.1.*"

سمت چپ نام پکیج و سمت را (2.1) نام ورژن اون پکیج می باشد.

نتیجه مانند زیر می شود :

"name": "laravel/laravel",
	"description": "The Laravel Framework.",
	"keywords": ["framework", "laravel"],
	"license": "MIT",
	"type": "project",
	"require": {
		"laravel/framework": "4.2.*",
		"cartalyst/sentry": "2.1.*"
	},

 

با این کار به لاراول گفتیم که این پکیج رو لازم داریم و برای نصب  آن باید در فایل CMD ویندوز ، دستور زیر را وارد نماییم :

php composer update

توجه کنید ابتدا در CMD به شاخه ی روت لاراول بروید و سپس دستور بالا را وارد نمایید .

نصب پکیج ممکنه چندین دقیقه طول بکشه.

2- بعد از نصب پکیج ، لازم هست که service provider مربوط به پکیج را به فریم ورک لاراول بشناسونیم. برای این کار فایل  app/config/app.php را باز کنید و در بخش $providers ، خط زیر را به آرایه اضافه کنید :

'Cartalyst\Sentry\SentryServiceProvider',

نتیجه ماانند زیر می شود :

'providers' => array(

		'Illuminate\Foundation\Providers\ArtisanServiceProvider',
		'Illuminate\Auth\AuthServiceProvider',
		'Illuminate\Cache\CacheServiceProvider',
		'Illuminate\Session\CommandsServiceProvider',
		'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider',
		'Illuminate\Routing\ControllerServiceProvider',
		'Illuminate\Cookie\CookieServiceProvider',
		'Illuminate\Database\DatabaseServiceProvider',
		'Illuminate\Encryption\EncryptionServiceProvider',
		'Illuminate\Filesystem\FilesystemServiceProvider',
		'Illuminate\Hashing\HashServiceProvider',
		'Illuminate\Html\HtmlServiceProvider',
		'Illuminate\Log\LogServiceProvider',
		'Illuminate\Mail\MailServiceProvider',
		'Illuminate\Database\MigrationServiceProvider',
		'Illuminate\Pagination\PaginationServiceProvider',
		'Illuminate\Queue\QueueServiceProvider',
		'Illuminate\Redis\RedisServiceProvider',
		'Illuminate\Remote\RemoteServiceProvider',
		'Illuminate\Auth\Reminders\ReminderServiceProvider',
		'Illuminate\Database\SeedServiceProvider',
		'Illuminate\Session\SessionServiceProvider',
		'Illuminate\Translation\TranslationServiceProvider',
		'Illuminate\Validation\ValidationServiceProvider',
		'Illuminate\View\ViewServiceProvider',
		'Illuminate\Workbench\WorkbenchServiceProvider',
		'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider',
		'Cartalyst\Sentry\SentryServiceProvider',

	),

و در همین فایل در پایین تر نام مستعار این پکیج را در قسمت aliases به فریم ورک لاراول معرفی می کنیم و خط زیر را اضافه می کنیم :

'Sentry' => 'Cartalyst\Sentry\Facades\Laravel\Sentry',

نتیجه مانند زیر می شود :

	'aliases' => array(

		'App'               => 'Illuminate\Support\Facades\App',
		'Artisan'           => 'Illuminate\Support\Facades\Artisan',
		'Auth'              => 'Illuminate\Support\Facades\Auth',
		'Blade'             => 'Illuminate\Support\Facades\Blade',
		'Cache'             => 'Illuminate\Support\Facades\Cache',
		'ClassLoader'       => 'Illuminate\Support\ClassLoader',
		'Config'            => 'Illuminate\Support\Facades\Config',
		'Controller'        => 'Illuminate\Routing\Controller',
		'Cookie'            => 'Illuminate\Support\Facades\Cookie',
		'Crypt'             => 'Illuminate\Support\Facades\Crypt',
		'DB'                => 'Illuminate\Support\Facades\DB',
		'Eloquent'          => 'Illuminate\Database\Eloquent\Model',
		'Event'             => 'Illuminate\Support\Facades\Event',
		'File'              => 'Illuminate\Support\Facades\File',
		'Form'              => 'Illuminate\Support\Facades\Form',
		'Hash'              => 'Illuminate\Support\Facades\Hash',
		'HTML'              => 'Illuminate\Support\Facades\HTML',
		'Input'             => 'Illuminate\Support\Facades\Input',
		'Lang'              => 'Illuminate\Support\Facades\Lang',
		'Log'               => 'Illuminate\Support\Facades\Log',
		'Mail'              => 'Illuminate\Support\Facades\Mail',
		'Paginator'         => 'Illuminate\Support\Facades\Paginator',
		'Password'          => 'Illuminate\Support\Facades\Password',
		'Queue'             => 'Illuminate\Support\Facades\Queue',
		'Redirect'          => 'Illuminate\Support\Facades\Redirect',
		'Redis'             => 'Illuminate\Support\Facades\Redis',
		'Request'           => 'Illuminate\Support\Facades\Request',
		'Response'          => 'Illuminate\Support\Facades\Response',
		'Route'             => 'Illuminate\Support\Facades\Route',
		'Schema'            => 'Illuminate\Support\Facades\Schema',
		'Seeder'            => 'Illuminate\Database\Seeder',
		'Session'           => 'Illuminate\Support\Facades\Session',
		'SoftDeletingTrait' => 'Illuminate\Database\Eloquent\SoftDeletingTrait',
		'SSH'               => 'Illuminate\Support\Facades\SSH',
		'Str'               => 'Illuminate\Support\Str',
		'URL'               => 'Illuminate\Support\Facades\URL',
		'Validator'         => 'Illuminate\Support\Facades\Validator',
		'View'              => 'Illuminate\Support\Facades\View',
		'Sentry' 			=> 'Cartalyst\Sentry\Facades\Laravel\Sentry',

	),

فایل app.php را ذخیره کنید چون دیگه باهاش کاری نداریم فعلا.

پکیج sentry نیاز داره به چند جدول داره که با دستور زیر می توانیم این جدول ها رو به صورت اتوماتیک با تمام فیلد های لازم در دیتابیس امون بسازیم :

این دستور نیز باید در CMD و در روت پروژه اجرا شود :

php artisan migrate --package=cartalyst/sentry

خب اینم از ساخت جدول.حتما بعد از این دستور دیتابستون رو چک کنید ، ببینید جداولی بهش اضافه شده یا خیر .

در آخرین مرحله باید فایل Config مربوط به این پکیج رو بسازیم .برای این کار مانند مرحله های قبلی دستوری رو در C MD وارد می کنیم تا این فایل در شاخه config/cartalyst/sentry ساخته بشه :

php artisan config:publish cartalyst/sentry

دیگه کارهای مقدماتی این پکیج تموم شد و الان پکیج senrty کاملا قابل استفاده است.

برای شروع Route های زیر رو در فایل Route ایجاد می کنیم. ما میخوایم برنامه ای بنویسیم که یک فریم ثبت نام داشته باشه که کاربر ثبت نام کنه.یک فرم لاگین داشته باشه که کاربر لاگین کنه و یک فایل dashboard.blade.php داشته باشیم که اگه کاربر لاگین کرد به این صفحه منتقل بشه در غیر این صورت اجازه این کارو نداشته باشه.

// ورت مربوط به ثبت نام
Route::get('register','HomeController@getRegister');

Route::post('register','HomeController@postRegister');

// روت برمبطو به لاگین
Route::get('login','HomeController@getLogin');

Route::post('login','HomeController@postLogin');

//روت مربوط به خارج شدن کاربر لاگ اوت
Route::get('logout','HomeController@logout');

// روت رفتن به صفحه داشبورد
Route::get('dashboard',['uses'=>'HomeController@dashboard','before'=>'SentryAuth']);

حالا نوبت به توابع ما در کنترلر میرسه.برای این کار همان طور که در روت مشخض کردیم یک کنترل به نام  HomeController داریم که توابع رو داخل اون مینوسیم.

ابتدا توابع مربوط به ثبن نام کاربر رو ایجاد می کنیم. تو این مرحله از کلاس Senrty  و متد createUser استفاده می کنیم :

// تابع مربوط به نشان دادن فرم ثبت نام به کاربر
	public function getRegister()
	{
		return View::make('register');
	}
// تابع مربوط به انجام عمل ثبت نام
	public function postRegister()
	{
		$user = Sentry::createUser(array(
        'email'     => Input::get('email'),
        'password'  => Input::get('password'),
        'activated' => true,
        'first_name'=>Input::get('first_name')
        ));
	}

همان طور که مشاهده می کنید اطلاعات فیلد های پر شده در فرم ثبت نام را با کلاس INPUT::GET در یافت کردیم و به فیلد های جدول Usersپاس دادیم تا در آن ذخیره شود.

یادمان باشد این جدول یکی از آن جدول هایی بود که در بالاتر اضافه کردیم و به آن اشاره نمودیم.

جدول Users فیلد های دیگری هم دارن که میتونید داخل دیتابیس چک کنید ، هر کدام که نیاز داشتید رو می تونید در اینجا بهش مقدار بدین تا ذخیره بشه.

تا یادم نرفته این رو هم بگم که فرم ثبت نام رو حتما خودتون ایجاد کنید با نام register.blade.php.

من یه فرم خیلی ساده ایجاد کردم که شما می تونید روش بیشتر وقت بزارید و فرم زیباتری رو ایجاد کنید :




	
	register


		email :
		


		password :
		


		first_name :
		


		
	

خب کارهای قسمت ثبت نام کاربر رو با لاراول و پکیج  Sentry انجام دادیم حالا نوبت میرسه به بخش لاگین کاربر. برای بخش لاگین من یک View ساده درست کردم که کارمون راه بیوفته.کد اونو قرار میدم که اگه حوصله ساخت فرم لاگین ندارین از همین استفاده کنید :




	
	login


		

		

		
	

اینم از فرم لاگین.برای کنترل لاگین هم از کد زیر استفاده می کنیم. این کد چک میکنه آیا کاربری با Email , Password واره شده ، در دیتابیس وجود دارد یا خیر.یا حتی ممکنه وجود داشته باشه ولی این کاربر رو اکتیو (active) نکرده باشیم به هر دلیلی .یا مثلا اگر کاربر یکی از دو فیلد ایمیل و پسورد رو خالی رها کرده باشه ، با پیغام مناسب به کاربر گزارش داده میشه .خلاصه همه ی این حالت ها رو پکیج Sentry چک میکنه و با پیغام مناسب به ما نتیجش رو اعلام میکنه. و اگر پیغامی چاپ نکرد یعنی این کاربر با موفقیت تونسته لاگین کنه .

//تابع مربوط به نمایش فرم لاگین به کاربر
	public function getLogin()
	{
		return View::make('login');
	}

// تابع مربوط به چک کردن پسورد و ایمیل وارده شده	
	public function postLogin()
	{


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

		    // Authenticate the user
		    $user = Sentry::authenticate($credentials, false);
		}
		catch (Cartalyst\Sentry\Users\LoginRequiredException $e)
		{
		    return 'Login field is required.';
		}
		catch (Cartalyst\Sentry\Users\PasswordRequiredException $e)
		{
		    return 'Password field is required.';
		}
		catch (Cartalyst\Sentry\Users\WrongPasswordException $e)
		{
		    return 'Wrong password, try again.';
		}
		catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
		{
		    return 'User was not found.';
		}
		catch (Cartalyst\Sentry\Users\UserNotActivatedException $e)
		{
		    return 'User is not activated.';
		}

		// The following is only required if the throttling is enabled
		catch (Cartalyst\Sentry\Throttling\UserSuspendedException $e)
		{
		    return 'User is suspended.';
		}
		catch (Cartalyst\Sentry\Throttling\UserBannedException $e)
		{
		    return 'User is banned.';
		}

		return Redirect::to('dashboard');

		



	}

 

در اخرین خط  گفتیم که اگه هیچ کدوم از این حالت ها نبود ، پس یعنی کاربر با موفقیت لاگین کرده در نتیجه کاربر را به Route به نام dashboard هدایت کن.این روت ، صفحه داشبورد را به کاربر نشان می دهد.

حالا در روت داشبود میخوایم چک کنیم که فقط کاربر هایی بتونن صفحه داشبورد رو ببین که لاگین کرده باشن. برای این کار از کد زیر در ادامه ی کدهای کنترلرمون استفاده می کنیم :

public function dashboard()
	{

		if ( ! Sentry::check())
		{
		    return Redirect::to('login');
		}
		else
		{
		    return View::make('dashboard');
		}

		
		
	}

همان طور که در بالا می بینیم اگر کاربر بدون لاگین به روت dashboard مراجعه کرده باشه و مثلا آدرس www.x.com/dashboard را وارد کرده باشه اول چک میکنه لاگین بوده یا نه و اگر لاگین نبوده باشه اونو هدایت میکنه به صفحه ی لاگین در غیر این صورت صفحه داشبورد رو بهش نشون میده .

در آخرین بخش از این آموزش Logout رو بررسی می کنیم که به وسیله ی آن ، تمام کوکی ها و سیشن های ذخیره شده مربوط به لاگین کاربر پاک شده و کاربر به صفحه ی لاگین هدایت می شود .

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

تنها نکته ی کد بالا قسمت Sentry::logOut است که به صورت اتومات تمام کارهای گفته شده برای خارج کردن کاربر را انجام می دهد.

 قبل از شروع چند نکته رو عرض کنم : 1- میتونستیم کدها رو حرفه ای تر بنوسیم و یا مثلا در فایل Fillter.php بیایم یک فیلتر تعریف کنیم و قبل از وارد شدن به روت ها اون فیلتر رو چک کنیم ولی خواستم کدها مقدماتی تر باشه. 2- توضیحات بیشتر و کدهای کامل تر رو از خود سایت Sentry که لینکش رو در پایین میزارم میتونین دریافت و مطلاعه نمایید . 

 

برای مطلاعه بیشتر درباره پکیج Sentry به این لینک مراجعه نمایید.

خب اینم از این قسمت از آموزش مربوط به فریم ورک لاراول.

امیدوارم راضی کننده بوده باشه.