آموزش Auth در cakephp

۱۳۸۹/۰۹/۰۷

cakephpاحراز هویت برای (Authentication) سایت های داینامیک از ملزومات محسوب می شه. در تمامی سایت ها برای ورود به بخش مدیریت باید از مدیر احراز هویت بشه و هر کسی اجازه ی ورود به بخش مدیریت رو نداشته باشه. در این مطلب شما تا حدودی با ساختار کیک آشنا شدید. cakephp ابزار بسیار مناسبی برای توسعه ی سایت های داینامیک محسوب می شه. و در این زمینه ابزار فوق العاده ای داره که به راحتی می تونید از کاربران احراز هویت کنید.
برای شروع کار شما می تونید کیک پی اچ پی نسخه ی ۱.۳.۶ رو دانلود کنید.
راهنمای کیک آموزش خیلی کاملی داده در این مورد که به راحتی می تونید در اینجا پیداش کنید.
یه جدول به نام یوزر درست می کنید با این مشخصات:

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(6) NOT NULL AUTO_INCREMENT,
  `user` varchar(64) COLLATE utf8_persian_ci NOT NULL,
  `pass` varchar(64) COLLATE utf8_persian_ci NOT NULL,
  `email` varchar(255) COLLATE utf8_persian_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=3 ;

فایل app_controller.php رو باز می کنید و کدهای زیر رو درش کپی می کنید:


                

برای کار با کامپوننت Auth در کیک پی اچ پی شما باید این خط رو به app_controller خودتون اضافه کنید. حالا دقت کنید که به محض اینکه شما این خط رو به app_controller اضافه می کنید کیک به صورت پیشفرض اجازه نمی ده که شما سایت رو ببینید و ریدایرکتتون می کنه به کنترلر users و اکشن login. و قاعدتن چون این اکشن رو ندارید خطا خواهد داشت.

البته می تونید آدرس لاگین کامپوننت Auth رو به این صورت عوض کنید:

$this->Auth->loginAction = array('admin' => false, 'controller' =>'anything', 'action' => 'login');

توابع مورد نیاز برای کنترولر یوزر رو خودتون اضافه می کنید. ولی برای login یه تابع می نویسید به این صورت:

        function login(){
                
        }

بعد توی شاخه ی view و شاخه ی users یه فایل با نام login.ctp می سازید با محتوای زیر:

create('User');
        echo $this->Form->input('user');
        echo $this->Form->input('pass');
        echo $form->end('ارسال');
?>

خب. حالا صفحه رو ریفرش کنید و ببینید که صفحه ی لاگین دیده می شه.
در فایل app_controller.php یه تابع اضافه می کنید به این صورت:

        function beforeFilter()
        {

        }

تابع beforeFilter قبل از فراخوانی هر تابعی ابتدا فراخوانی می شه. در تمامی کنترولر ها هم می تونید از این تابع استفاده کنید. ولی در فایل app_contriller.php قبل از فراخوانی هر تابعی در هر کنترولری این تابع فراخوانی می شه.
داخل فایل این کد رو اضافه می کنید:

                $this->Auth->fields = array('username' => 'user','password' => 'pass');

با این کار ما به کامپوننت Auth فیلدهای username و password خودمون رو تعیین می کنیم.

                $this->Auth->loginRedirect = array('controller' => 'controllerName' , 'action' => 'actionName');
                $this->Auth->logoutRedirect = array('controller' => 'controllerName2' , 'action' => 'actionName2');

در این بخش هم اکشن های لاگین و لاگ اوت رو تعیین می کنید. یعنی وقتی کاربر لاگین کرد به کجا هدایت بشه و وقتی لاگ اوت کرد به کجا هدایت بشه.

        $this->Auth->loginError = 'نام کاربری یا کلمه ی عبور اشتباه است. دوباره تلاش کنید';
        $this->Auth->authError = 'شما اجازه ی دسترسی به این بخش را ندارید';

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

خوب:
حالا وقتی کاربر لاگین می کنه به تمامی اکشن ها و کنترولر های شما دسترسی داره. اما به صورت عادی بازدیدکننده ها هم باید بدون لاگین کردن به بخش هایی از سایت دسترسی داشته باشن.
برای نمونه شما یه کنترولر به نام post دارید و اجازه می دید اکشن index رو تمامی بازدید کننده های سایت ببینند. برای این کار می تونید از این متد استفاده کنید:

                $this->Auth->allow('actionName');

و برای محدود کردن از این کد استفاده کنید:

                $this->Auth->deny('actionName');

از علامت ستاره هم برای همه ی اکشن ها استفاده کنید:

                $this->Auth->deny('*');

بازدیدکننده های سایت می تونند به اکشن هایی با نام actionName دسترسی داشته باشند بدون اینکه لاگین کنند. دقت کنید که اکشن actionName در تمامی کنترولر ها قابل دسترس خواهد بود.

به طور معمول شما باید دسترسی همه اکشن ها رو deny کنید و فقط اونایی رو که باید allow کنید. برای نمونه یه همچین کدی خواهید داشت:

                $this->Auth->deny('*');
                $this->Auth->allow('contac');
                $this->Auth->allow('view');
                $this->Auth->allow('test');

خیلی هم خوب
به همین راحتی به جای نوشتن کلی کد می تونید از یه Authentication خیلی خوب و امن و راحت لذت ببرید.
کیک بخورید که در آن فایده هاست

پ.ن:
این نکته رو توجه کنید که وقتی کامپوننت Auth رو فعال می کنید هنگام افزودن کاربر جدید خود این کامپوننت پسورد رو هش می کنه. برای اینکه کاربر بسازید برای لاگین باید کامپوننت رو فعال کنید و دسترسی به تمام بخش ها رو allow کنید. بعد که کاربر ساختید می تونید deny کنید.

امیدوارم که براتون مفید بوده باشه
موفق باشید

5 دیدگاه در “آموزش Auth در cakephp

  1. عالی بود. اما کاش از ابتدا این فریم ورک رو آموزش میدادید حتی اگر از مقالات دیگران استفاده کرده بودید.

  2. بازپینگ: آموزش cakephp - چک کردن نام کاربری | PHPDevelopers.ir

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شما می‌توانید از این دستورات HTML استفاده کنید: