زمان جاری: 2012/05/20, 06:58 AM خوش آمدید مهمان گرامی! (ورودعضویت)



مشکل در کامپوننت auth


ارسال موضوع  ارسال پاسخ 
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رتبه موضوع:
 
مشکل در کامپوننت auth
نویسنده پیام
reza_web آفلاین
عضو جدید
*

ارسال‌ها: 8
تاریخ عضویت: May 2010
رتبه: 0
تشکر: 2
1 بار تشکر شده در 1 پست
ارسال: #1
مشکل در کامپوننت auth
سلام
من دارم با استفاده از آموزش این کامپوننت در سایت آقای الوانی یک سیستم لاگین می سازم
ولی چند مشکل دارم:
1- پیغام خطای ورود که به این صورت است :
$this->Auth->loginError = 'Invalid email or password. Please try again.';
$this->Auth->authError = 'The page you have requested requires you to login.';
که در beforfilter نوشته می شود هیچ کاری انجام نمی دهد یعنی هیچ پیامی داده نمی شود.

2- بعد از کاربر صحیح لاگین کرد نمی خواهم به
public $allowedActions = array('index');
$this->Auth->allow( $allowAction );
برود (یعنی به اکشن index در همان کنترلر) بلکه می خواهم به کنترل دیگری برود برای همین از این دستور استفاده می کنم:
$this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'index');
که صحیح هم کار می کند
آیا راه حل بهتری دارد؟
3- بخش :$this->Auth->deny( $denyAction ); را هم اصلا متوجه نشدم

ببخشید که طولانی شد
می شه کمک کنید
2010/08/11 11:27 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 988
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
869 بار تشکر شده در 559 پست
ارسال: #2
RE: مشکل در کامپوننت auth
کدتون رو اینجا بزارید. چون اون مثال هیچ مشکلی نداره و خود من از روی اون شروع کردم کار با کیک رو
2010/08/11 06:40 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
payamsp آفلاین
Sheriff
*****

ارسال‌ها: 68
تاریخ عضویت: Mar 2010
رتبه: 4
تشکر: 330
91 بار تشکر شده در 44 پست
ارسال: #3
RE: مشکل در کامپوننت auth
برای اینکه پیغام ها نمایش داده بشند باید کد زیر رو تو فایل view مربوط به فرم لاگین وارد کنید
کد PHP:
<?php echo $session->flash('auth'); ?>
در نسخه جدید کیک باید echo رو بزارید .
در مورد redirect هم همین راهی که استفاده می کنید درسته .
با استفاده از متد deny هم می تونیم اکشن هایی رو که کاربر برای رفتن به اون ها باید لاگین کنه رو مشخص کنیم .
2010/08/11 07:28 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : sibetorsh
reza_web آفلاین
عضو جدید
*

ارسال‌ها: 8
تاریخ عضویت: May 2010
رتبه: 0
تشکر: 2
1 بار تشکر شده در 1 پست
ارسال: #4
RE: مشکل در کامپوننت auth
ممنون مشکل همین بود که گفتید
کد:
class AppController extends Controller {
    var $components = array('Auth');
    public $allowedActions = array('index');
    public $deniedActions = array();

    function beforeFilter() {
    
        Security::setHash('md5');
        $this->Auth->fields = array('username' => 'email', 'password' => 'secretpass');
        $this->Auth->loginError = 'Invalid email or password. Please try again.';
        $this->Auth->authError = 'The page you have requested requires you to login.';
        foreach( $this->allowedActions as $allowAction ){
            
            $this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'index');
        }

        foreach( $this->deniedActions as $denyAction ){
            
            $this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'add');
        }

    }
}

بخش deny یعنی چی؟
چیکار می کنه؟

و یک سوال دیگه: آیا می شود در یک کنترلر بعضی از اکشن ها نیاز به لاگین داشته باشد و بعضی نیاز نداشته باشد و یا باید در کنترلرهای مختلف نوشته شوند؟
2010/08/12 10:18 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 988
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
869 بار تشکر شده در 559 پست
ارسال: #5
RE: مشکل در کامپوننت auth
وقتی allow میکنی یعنی نیاز به لاگین نداره
وقتی deny میکنی یعنی کاربر باید لاگین کرده باشه تا به اون اکشن دسترسی داشته باشه
2010/08/12 12:27 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
reza_web آفلاین
عضو جدید
*

ارسال‌ها: 8
تاریخ عضویت: May 2010
رتبه: 0
تشکر: 2
1 بار تشکر شده در 1 پست
ارسال: #6
RE: مشکل در کامپوننت auth
ولی فکرکنم منظور از کد زیر اینه که بعد از لاگین به این کنترل و اکشن هدایت بشود
کد:
foreach( $this->allowedActions as $allowAction ){
            
            $this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'index');
        }

ولی این را نمی دانم
کد:
foreach( $this->deniedActions as $denyAction ){
            
            $this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'add');
        }
از این کجا باید استفاده کنیم و یعنی چه:
کد:
$this->Auth->deny( $denyAction );
2010/08/12 04:59 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
cybercoder غایب
Expired
**

ارسال‌ها: 108
تاریخ عضویت: Dec 2009
رتبه: 1
تشکر: 51
82 بار تشکر شده در 46 پست
ارسال: #7
RE: مشکل در کامپوننت auth
این کدهایی که من استفاده می کنم عموما رو ببین متوجه می شی
کد:
<?php
    class AppController extends Controller
    {
        var $helpers=array('Html','Form','Javascript','PersianDate','Tree') ;
        var $components=array('Auth','Acl') ;
        var $view = 'Theme' ;
        
        public $allowedActions = array('search','recent_news','display','login','logout','register','activate','c​aptcha','isuseravailable','phpthumb','loadPostsByCategory','loadcontents','loadm​enutree');
        //public $deniedActions = array('add','edit','delete');

        function beforeFilter() {
            $this->theme = "default";
            //$this->Acl->allow('User:2','Post:8','*');
            Security::setHash('md5');
            $this->Auth->userScope = array('User.active'=>1);
            
            foreach( ($this->allowedActions) as $allowAction ){
                    $this->Auth->allow($allowAction);
            }
            
            $current_user=$this->Auth->user() ;
            if (!empty($current_user)) {
                $this->Set('loggedin',true) ;
                $this->set('current_user',$current_user) ;
                if ($this->Acl->check('Group:'.$current_user['User']['group_id'], $this->Auth->action('cpanel/index')))
                    $this->set('canaccesscpanel',true) ;
            }
            else{
                // fetch and allow guest permmited actions
                //if ($this->Acl->check("Guest", $this->Auth->action($this->params['controller'].'/'.$this->params['action']), "read"))
                    $this->Auth->allow();
                $this->Set('loggedin',false) ;
            }
            $this->Auth->allow();
            $this->Auth->autoRedirect = true;
            $this->Auth->authorize = 'actions' ;        
            $this->Auth->loginRedirect=array('controller'=>'users','action'=>'login') ;
        }
    }
?>
2010/08/12 06:34 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : saleh payamsp reza_web thinking21 farhadfery
saleh آفلاین
Administrator
*******

ارسال‌ها: 988
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
869 بار تشکر شده در 559 پست
ارسال: #8
RE: مشکل در کامپوننت auth
ببین دوست عزیز شما برای استفاده از AUTH می بایست از پدر کنترلر ها یعنی app_controller بهره بگیرید.

زمانی که شما در این کنترلر کد یا کامپوننتی استفاده کنید . در تمام کنترلر ها به ارس برده میشه.

به این صورت
کد PHP:
function beforeFilter() {

  
Security::setHash('md5');      
  
$this->Auth->fields = array( 'username' => 'username''password' => 'password' );
  
$this->Auth->loginAction = array('admin' => true'controller' => 'users''action' => 'login');
  
$this->Auth->loginRedirect = array('controller' => 'pages''action' => 'dashboard');
  
$this->Auth->loginError "No, you fool! That's not the right password!";
  
$this->Auth->authError "Sorry, you are lacking access.";

       


یک بار واسه همیشه.

حالا در هر کنترلر شما می تونید یک اکشن رو دست رسی عام بدید یا برای اعضا باز کنید
در حالت معمول همه اکشن ها deny هستند.

پی شما میاید در کنترلر هایی که نیاز دارید اکشن خاصی دسترسی آزاد داشته باشه از کد زیر استفاده میکنید

کد PHP:
function beforeFilter() {
  
$this->Auth->allow('index');

2010/08/12 06:34 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : cybercoder payamsp
saleh آفلاین
Administrator
*******

ارسال‌ها: 988
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
869 بار تشکر شده در 559 پست
ارسال: #9
RE: مشکل در کامپوننت auth
باهم گذاشتیم Smile)
(آخرین تغییر در این ارسال: 2010/08/12 06:40 PM توسط cybercoder.)
2010/08/12 06:35 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : reza_web
reza_web آفلاین
عضو جدید
*

ارسال‌ها: 8
تاریخ عضویت: May 2010
رتبه: 0
تشکر: 2
1 بار تشکر شده در 1 پست
ارسال: #10
RE: مشکل در کامپوننت auth
متشکرم
خداوند شما را یا کیک پی اچ پی محشور فرماید!
2010/08/14 10:59 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : payamsp
thinking21 آفلاین
تازه کار
*

ارسال‌ها: 27
تاریخ عضویت: Sep 2010
رتبه: 0
تشکر: 10
0 بار تشکر شده در 1 پست
ارسال: #11
RE: مشکل در کامپوننت auth
(2010/08/12 06:34 PM)cybercoder نوشته است:  این کدهایی که من استفاده می کنم عموما رو ببین متوجه می شی
کد:
<?php
    class AppController extends Controller
    {
        var $helpers=array('Html','Form','Javascript','PersianDate','Tree') ;
        var $components=array('Auth','Acl') ;
        var $view = 'Theme' ;
        
        public $allowedActions = array('search','recent_news','display','login','logout','register','activate','c​aptcha','isuseravailable','phpthumb','loadPostsByCategory','loadcontents','loadm​enutree');
        //public $deniedActions = array('add','edit','delete');

        function beforeFilter() {
            $this->theme = "default";
            //$this->Acl->allow('User:2','Post:8','*');
            Security::setHash('md5');
            $this->Auth->userScope = array('User.active'=>1);
            
            foreach( ($this->allowedActions) as $allowAction ){
                    $this->Auth->allow($allowAction);
            }
            
            $current_user=$this->Auth->user() ;
            if (!empty($current_user)) {
                $this->Set('loggedin',true) ;
                $this->set('current_user',$current_user) ;
                if ($this->Acl->check('Group:'.$current_user['User']['group_id'], $this->Auth->action('cpanel/index')))
                    $this->set('canaccesscpanel',true) ;
            }
            else{
                // fetch and allow guest permmited actions
                //if ($this->Acl->check("Guest", $this->Auth->action($this->params['controller'].'/'.$this->params['action']), "read"))
                    $this->Auth->allow();
                $this->Set('loggedin',false) ;
            }
            $this->Auth->allow();
            $this->Auth->autoRedirect = true;
            $this->Auth->authorize = 'actions' ;        
            $this->Auth->loginRedirect=array('controller'=>'users','action'=>'login') ;
        }
    }
?>

سلام
ببخشید من این قسمتها رو مشکل دارم می شه یکمی توضییح بدین
مثلا
کد PHP:
$this->set 
از داخل کلاس AppController چی رو set می کنه و این کدها :
کد PHP:
if ($this->Acl->check('Group:'.$current_user['User']['group_id'], $this->Auth->action('cpanel/index')))
                    
$this->set('canaccesscpanel',true) ; 
ممنون و [/php]متشکر
(آخرین تغییر در این ارسال: 2010/11/20 07:32 PM توسط thinking21.)
2010/11/20 07:25 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 988
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
869 بار تشکر شده در 559 پست
ارسال: #12
RE: مشکل در کامپوننت auth
یک متغیر رو در تموم ویو ها با مقدار true ارسال میکنه
2010/11/25 01:41 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
ارسال موضوع  ارسال پاسخ 


پرش در انجمن: