آموزش Auth در cakephp
يكشنبه, ۷ آذر ۱۳۸۹، ۰۲:۱۲ ب.ظ
احراز هویت برای (Authentication) سایت های داینامیک از ملزومات محسوب می شه. در تمامی سایت ها برای ورود به بخش مدیریت باید از مدیر احراز هویت بشه و هر کسی اجازه ی ورود به بخش مدیریت رو نداشته باشه. در این مطلب شما تا حدودی با ساختار کیک آشنا شدید. cakephp ابزار بسیار مناسبی برای توسعه ی سایت های داینامیک محسوب می شه. و در این زمینه ابزار فوق العاده ای داره که به راحتی می تونید از کاربران احراز هویت کنید.
برای شروع کار شما می تونید کیک پی اچ پی نسخه ی ۱.۳.۶ رو دانلود کنید.
راهنمای کیک آموزش خیلی کاملی داده در این مورد که به راحتی می تونید در اینجا پیداش کنید.
یه جدول به نام یوزر درست می کنید با این مشخصات:
البته می تونید آدرس لاگین کامپوننت Auth رو به این صورت عوض کنید:
در فایل app_controller.php یه تابع اضافه می کنید به این صورت:
داخل فایل این کد رو اضافه می کنید:
خوب:
حالا وقتی کاربر لاگین می کنه به تمامی اکشن ها و کنترولر های شما دسترسی داره. اما به صورت عادی بازدیدکننده ها هم باید بدون لاگین کردن به بخش هایی از سایت دسترسی داشته باشن.
برای نمونه شما یه کنترولر به نام post دارید و اجازه می دید اکشن index رو تمامی بازدید کننده های سایت ببینند. برای این کار می تونید از این متد استفاده کنید:
به طور معمول شما باید دسترسی همه اکشن ها رو deny کنید و فقط اونایی رو که باید allow کنید. برای نمونه یه همچین کدی خواهید داشت:
به همین راحتی به جای نوشتن کلی کد می تونید از یه Authentication خیلی خوب و امن و راحت لذت ببرید.
کیک بخورید که در آن فایده هاست :D
پ.ن:
این نکته رو توجه کنید که وقتی کامپوننت Auth رو فعال می کنید هنگام افزودن کاربر جدید خود این کامپوننت پسورد رو هش می کنه. برای اینکه کاربر بسازید برای لاگین باید کامپوننت رو فعال کنید و دسترسی به تمام بخش ها رو allow کنید. بعد که کاربر ساختید می تونید deny کنید.
امیدوارم که براتون مفید بوده باشه
موفق باشید
برای شروع کار شما می تونید کیک پی اچ پی نسخه ی ۱.۳.۶ رو دانلود کنید.
راهنمای کیک آموزش خیلی کاملی داده در این مورد که به راحتی می تونید در اینجا پیداش کنید.
یه جدول به نام یوزر درست می کنید با این مشخصات:
CREATE TABLE IF NOT EXISTS `users` (فایل app_controller.php رو باز می کنید و کدهای زیر رو درش کپی می کنید:
`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 ;
class AppController extends Controller {برای کار با کامپوننت Auth در کیک پی اچ پی شما باید این خط رو به app_controller خودتون اضافه کنید. حالا دقت کنید که به محض اینکه شما این خط رو به app_controller اضافه می کنید کیک به صورت پیشفرض اجازه نمی ده که شما سایت رو ببینید و ریدایرکتتون می کنه به کنترلر users و اکشن login. و قاعدتن چون این اکشن رو ندارید خطا خواهد داشت.
var $components = array('Session', 'Auth');
البته می تونید آدرس لاگین کامپوننت Auth رو به این صورت عوض کنید:
$this->Auth->loginAction = array('admin' => false, 'controller' =>'anything', 'action' => 'login');توابع مورد نیاز برای کنترولر یوزر رو خودتون اضافه می کنید. ولی برای login یه تابع می نویسید به این صورت:
function login(){بعد توی شاخه ی view و شاخه ی users یه فایل با نام login.ctp می سازید با محتوای زیر:}
echo $form->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 خیلی خوب و امن و راحت لذت ببرید.
کیک بخورید که در آن فایده هاست :D
پ.ن:
این نکته رو توجه کنید که وقتی کامپوننت Auth رو فعال می کنید هنگام افزودن کاربر جدید خود این کامپوننت پسورد رو هش می کنه. برای اینکه کاربر بسازید برای لاگین باید کامپوننت رو فعال کنید و دسترسی به تمام بخش ها رو allow کنید. بعد که کاربر ساختید می تونید deny کنید.
امیدوارم که براتون مفید بوده باشه
موفق باشید
۸۹/۰۹/۰۷