9月2日更新:故障排除CakePHP的權威性組件不允許允許的操作
這已成爲一個非常困難的難題解決。建立一個基本的認證,這是我想要的,應該涉及很少的步驟。我做了很多測試,添加和刪除代碼,審查蛋糕手冊,閱讀教程,並逐步通過Mariano Iglesias的CakePHP 1.3應用程序開發菜譜 - 一本好書。 http://goo.gl/93BGw
但我仍然面臨的問題是應用程序控制器是'允許'操作工作的唯一地方。在單獨的控制器中,parent:beforeFilter沒有被識別,我被重定向回到用戶登錄頁面。
任何與此有關的幫助真的很感激。我想知道的是如何調試這種類型的問題。有沒有其他的配置設置我應該看看,比如'前綴路由'?
=======================
9月1日更新:
大量的測試似乎是這個問題後,在個別控制器中的「之前:過濾器」未被識別。後控制器中的示例:
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow = array('edit');
}
有沒有人有過這種情況?我已經提到了CakePHP手冊以及許多在線文章和教程,它對我沒有任何意義。我甚至試圖用只有用戶和後控制器構建一個簡單的應用程序,但仍然沒有識別每個控制器中的before:filter設置。
======================= 原始問題。
我正在使用Cakephp身份驗證組件來管理管理部分。這是使用版本1.3.11
我遇到的問題是,即使在每個控制器允許的操作,我被重定向到用戶登錄頁面。
這裏是什麼在應用程序控制器:
class AppController extends Controller {
var $components = array(
'Auth' => array(
'authorize' => 'controller'
),
'Session',
'RequestHandler'
);
public function isAuthorized() {
return true;
}
function beforeFilter(){
$this->Auth->authorize = 'controller';
$this->Auth->fields = array('username' => 'username', 'password' => 'password');
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->authError = 'Please login to view that page ';
$this->Auth->loginError =' The user name or password you entered did not work, please try again ' ;
$this->Auth->allow('display');
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'logout');
$this->Auth->loginRedirect = array('controller' => 'pages', 'action' => 'display', 'home');
}
這是什麼在用戶控制器: 類UsersController擴展的AppController {
var $name = 'Users';
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow = array('add');
}
這是什麼在崗位控制器:
class PostsController extends AppController {
var $name = 'Posts';
var $components = array('Session','RequestHandler', 'Email');
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow = array('edit');
}
我發現的是,已經登錄我可以像預期的那樣訪問主頁。然後當我去註銷時,會話並沒有被完全銷燬,所以我可以回到'管理'部分。
我曾嘗試使用$ this-session('destroy');在註銷操作中,但是當我執行了允許的操作時不再工作。
這是否有意義?不允許的行爲是否獨立於當前會話?
謝謝,保羅
嗯,你能添加關於你的註銷操作的任何細節嗎? – mtnorthrop
嘗試設置登錄和註銷重定向並再試一次 $ this-> Auth-> loginAction = array('controller'=>'users','action'=>'login'); $ this-> Auth-> logoutRedirect = array('controller'=>'users','action'=>'logout'); $ this-> Auth-> loginRedirect = array('controller'=>'posts','action'=>'add'); – 8vius
嗨8vius,我試過這個,並沒有問題的區別。在我的測試中,我發現如果在app_controller中允許所有這樣的操作,$ this-> Auth-> allow('*');那麼所有的動作都被授權,但是如果我只授權'索引'然後在單獨的控制器中授權其他類似這樣的方法,\t public function beforeFilter(){0} {0}}}}} \t \t $ this-> Auth-> allow = array('view','aboutUs'); \t \t},它們不被識別,我被重定向到用戶登錄頁面。所以問題仍然是控制器中的parent:beforeFilter不起作用。想法? – Paul