2012-10-21 58 views
3

我正在使用cakePHP 2.0,並安裝了cakeDC用戶插件。 Users插件似乎正在工作,只要我可以登錄並重定向到插件的UsersController _setupAuth函數中定義的「/」。CakeDC用戶插件如何擴展它可以自定義登錄控制?

但是,正如我想修改這個,我從another stackoverflow question添加了一些認證設置代碼到我的AppController beforeFilter函數。

問題是,這似乎被忽略,並且UsersController中的_setupAuth代碼優先。

所以,我的問題是,如何在我的AppController中添加自定義重定向控件,而無需更改插件中的代碼?

我更加困惑的是,我已經鏈接到的問題告訴我們在AppController中放置了一個isAuthorized函數,這似乎意味着我必須刪除UsersAppController中的一個。

回答

2

這個想法是,你可以通過覆蓋它的app中的類來擴展它。

您無法在AppController中配置您的應用特定Auth設置。您還需要在項目中包含Auth組件。

然後在你的AppController::beforeFilter()您可以配置特定的設置,如

$this->Auth->loginRedirect = '/'; 

所以,你鏈接到另一個問題是正確的,但你並不需要所有的設置,只是你想要的那些覆蓋。

如果您使用的是Controller身份驗證,我還強烈建議您向AppController添加一個isAuthorized(),因爲您需要控制哪些人可以查看哪些內容。 不要另一個問題說,只是返回true,因爲你沒有檢查任何角色或登錄是不好的。

如果你想改變登錄動作,你需要在你的'app/Controller'中創建你自己的控制器,並把它稱爲Users以外的東西,我傾向於使用MyUsersController.php,在這個控制器中,我想要擴展插件控制器。您將需要包括與App::uses('Users.UsersController','Controller')或類似的文件,然後你的控制器可

class MyUsersController extends UsersController{ 
    public function login(){ 

    } 
} 

我已經沒有必要與用戶插件來做到這一點的,所以也許只是嘗試配置您的AppController::beforeFilter()第一,和檢查您是否在頂部調用parent::beforeFilter()

1

您是否更改了routes.php重定向? 這裏是我的,我禁用插件路線來引用我自己的控制器AppUsersController.php

請注意,我使用/ admin /前綴。如果您不需要,請在路徑路徑的開頭刪除'/ admin /',然後刪除'前綴'和'admin'密鑰表。

Router::connect('/admin/users', array('plugin' => null, 'controller' => 'app_users', 'prefix' => 'admin', 'admin' => true)); 
Router::connect('/admin/users/index/*', array('plugin' => null, 'controller' => 'app_users', 'prefix' => 'admin', 'admin' => true)); 
Router::connect('/admin/users/users/:action/*', array('plugin' => null, 'controller' => 'app_users', 'prefix' => 'admin', 'admin' => true)); 
Router::connect('/admin/users', array('plugin' => null, 'controller' => 'app_users', 'prefix' => 'admin', 'admin' => true)); 
Router::connect('/users/:action/*', array('admin' => false, 'plugin' => null, 'controller' => 'app_users')); 
Router::connect('/login/*', array('plugin' => null, 'controller' => 'app_users', 'action' => 'login')); 
Router::connect('/logout/*', array('plugin' => null, 'controller' => 'app_users', 'action' => 'logout')); 
Router::connect('/register/*', array('plugin' => null, 'controller' => 'app_users', 'action' => 'add'));