CakePHP基本身份验证:主页的Auth-> allow('display')不起作用

时间:2014-01-18 20:05:36

标签: php cakephp authentication

我已经创建了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'到允许的方法列表,然后它没有重定向!谢谢您的帮助!您还需要允许所请求操作中包含的所有方法!

1 个答案:

答案 0 :(得分:0)

在PagesController中,在beforeFilter中,你可以尝试

$this->Auth->allow('*');