reza_web
عضو جدید

ارسالها: 8
تاریخ عضویت: May 2010
رتبه: 0
تشکر: 2
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 |
|
payamsp
Sheriff
    
ارسالها: 68
تاریخ عضویت: Mar 2010
رتبه: 4
تشکر: 330
91 بار تشکر شده در 44 پست
|
RE: مشکل در کامپوننت auth
برای اینکه پیغام ها نمایش داده بشند باید کد زیر رو تو فایل view مربوط به فرم لاگین وارد کنید
کد PHP:
<?php echo $session->flash('auth'); ?>
در نسخه جدید کیک باید echo رو بزارید .
در مورد redirect هم همین راهی که استفاده می کنید درسته .
با استفاده از متد deny هم می تونیم اکشن هایی رو که کاربر برای رفتن به اون ها باید لاگین کنه رو مشخص کنیم .
|
|
| 2010/08/11 07:28 PM |
|
reza_web
عضو جدید

ارسالها: 8
تاریخ عضویت: May 2010
رتبه: 0
تشکر: 2
1 بار تشکر شده در 1 پست
|
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 |
|
reza_web
عضو جدید

ارسالها: 8
تاریخ عضویت: May 2010
رتبه: 0
تشکر: 2
1 بار تشکر شده در 1 پست
|
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
 
ارسالها: 109
تاریخ عضویت: Dec 2009
رتبه: 1
تشکر: 51
82 بار تشکر شده در 46 پست
|
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','captcha','isuseravailable','phpthumb','loadPostsByCategory','loadcontents','loadmenutree');
//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
Administrator
      
ارسالها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
871 بار تشکر شده در 560 پست
|
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 |
|
reza_web
عضو جدید

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

ارسالها: 27
تاریخ عضویت: Sep 2010
رتبه: 0
تشکر: 10
0 بار تشکر شده در 1 پست
|
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','captcha','isuseravailable','phpthumb','loadPostsByCategory','loadcontents','loadmenutree');
//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') ;
}
}
?>
سلام
ببخشید من این قسمتها رو مشکل دارم می شه یکمی توضییح بدین
مثلا
از داخل کلاس 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 |
|