2011-09-30 30 views
1

我在使用驗證組件時遇到問題$this->Auth->allow('index','view'); 我使用$this->Auth->allow('*')時,我得到的/ users/login導致了太多的重定向,它工作正常。我使用CakePHP 1.3.12這裏是app_controller.phpcakephp驗證組件允許重定向問題

class AppController extends Controller { 
    var $components = array('Auth','Session'); 
    function beforeFilter(){  
     $this->Auth->allow('index','view'); 
    } 
} 

我改變了app_controller.php

class AppController extends Controller { 
    var $components = array('Auth','Session'); 
    function beforeFilter(){  
     $this->Auth->allow(array('index','view','display')); 
    } 
} 

users_controller.php中

class UsersController extends AppController { 

var $name = 'Users'; 

function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow(array('login','logout')); 
} 

function login() { 
    if ($this->Session->read('Auth.User')) { 
     $this->redirect('/', null, false); 
    } 
} 

routes.php文件

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); 
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display')); 

有什麼建議嗎? 由於

+0

我使用CakePHP 1.3.12 – mentes

+0

我使用Apache/2.2.17 PHP/5.3.5 – mentes

回答

1

其數組=)

$this->Auth->allow(array('index','view')); 

你獲得這個too many redirects消息具有因的/用戶/登錄動作是不可訪問的。所以服務器試圖顯示登錄頁面,但它不能,因爲普通的非連接用戶沒有訪問/ user/login。而當用戶無法訪問頁面時,服務器會將其重定向到登錄頁面......所以您會看到,它是一個無限循環。

/user/login操作應授權給所有人。你Users控制器應該是這樣的:

class UsersController extends AppController { 

var $name = 'Users'; 
function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow(array('login','logout')); 
} 

function login(){ 
    if ($this->Session->read('Auth.User')) { 
     $this->redirect('/', null, false); 
    } 
} 

    //if you're using prefix routes. 
function admin_login(){ 
    $this->redirect('/users/login'); 
} 

如果這沒有問題,也許你要重定向的頁面在routes.php文件

希望這有助於

+0

感謝您的快速回復我試過這個,但沒有運氣。即使它不允許索引和查看操作 – mentes

+0

您還需要允許登錄操作... – pleasedontbelong

+0

感謝您的評論我試過這一個,但沒有運氣。我清除緩存和瀏覽器上的所有內容,但它說了太多的重定向 – mentes

2

不知道但您可能想檢查是否有任何請求操作。

「如果您在佈局或元素中使用requestAction,則應該允許這些操作以便能夠正確打開登錄頁面。」
http://book.cakephp.org/1.3/en/view/1257/allow

這讓我難倒了最長的時間。

比方說,你在你的模板某處渲染元素:

echo $this->element('comments'); 

並在意見/元/ comments.ctp你有一些要求,是

$comments = $this->requestAction('comments/index'); 
foreach($comments as $comment) { 
// print stuff 
} 

動作在你CommentsController您必須:

function beforeFilter() { 
    $this->Auth->allow('index'); 
} 

請注意,您正在請求您的c在您的元素中省略控制器。這就是爲什麼你必須允許該指定控制器的'索引'。

我還沒有看到任何地方正確解決這個問題。希望這是什麼導致你的錯誤。

0

你做錯了。應用程序如何才能知道您正在嘗試控制哪個控制器操作。從控制器執行操作。

從應用中移除此

$這 - > Auth->允許(陣列( '索引', '觀看', '顯示器'));

試試這個在您的應用程序控制器,需要更改

 $this->Auth->loginError = "Wrong credentials. Please provide a valid username and password."; 

     $this->Auth->authError = "You don't have sufficient privilege to access this resource."; 

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

     $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login'); 

     $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'dashboard'); 

從用戶控制器

$this->Auth->userModel = 'User'; 
$this->Auth->allow('*'); 

而在你登錄做到這一點不做任何事情你所有的重定向和所有會由應用程序控制器做。

如果你有關於任何疑問,這個郵件我

[email protected]