我已经创建了CakePHP的Cookbook中描述的简单身份验证。我在这里读到很多有同样的问题,在进入主页时,cakephp仍然会重定向到登录页面。但解决方案只是添加
$this->Auth->allow('display')
我的PagesController中的不起作用。但它仍然会重定向到登录页面。无需登录即可访问所有其他视图,这很奇怪。
这是代码: AppController的:
class AppController extends Controller {
public $components = array(
'DebugKit.Toolbar',
'Crud.Crud' => array(
'actions' => array(
// The controller action 'index' will map to the IndexCrudAction
'index' => 'Crud.Index',
// The controller action 'add' will map to the AddCrudAction
'add' => 'Crud.Add',
// The controller action 'edit' will map to the EditCrudAction
'edit' => 'Crud.edit',
// The controller action 'view' will map to the ViewCrudAction
'view' => 'Crud.View'
)
),
'Session',
'Auth' => array(
'loginRedirect' => array(
'controller' => 'Pages',
'action' => 'display'
),
'logoutRedirect' => array(
'controller' => 'pages',
'action' => 'display',
'home'
),
'authorize' => array('Controller')
)
);
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('index', 'view');
}
public function isAuthorized($user) {
// Admin can access every action
if (isset($user['role']) && $user['role'] === 'admin') {
return true;
}
// Default deny
return false;
}
//Loading Crud Plugin
use CrudControllerTrait;
PagesController:
public function display() {
$path = func_get_args();
$count = count($path);
if (!$count) {
return $this->redirect('/');
}
$page = $subpage = $title_for_layout = null;
if (!empty($path[0])) {
$page = $path[0];
}
if (!empty($path[1])) {
$subpage = $path[1];
}
if (!empty($path[$count - 1])) {
$title_for_layout = Inflector::humanize($path[$count - 1]);
}
$this->set(compact('page', 'subpage', 'title_for_layout'));
try {
$this->render(implode('/', $path));
} catch (MissingViewException $e) {
if (Configure::read('debug')) {
throw $e;
}
throw new NotFoundException();
}
}
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('display');
}
就像说的那样," $ this-> Auth-> allow方法似乎适用于所有其他视图,但不适用于主页。
修改 问题解决了!我已经评论了我的" this-> requestAction" out并添加' display'到允许的方法列表,然后它没有重定向!谢谢您的帮助!您还需要允许所请求操作中包含的所有方法!
答案 0 :(得分:0)
在PagesController中,在beforeFilter中,你可以尝试
$this->Auth->allow('*');