Cake Auth组件仅适用于一个浏览器

时间:2016-02-03 08:17:22

标签: php authentication cakephp cakephp-2.x

我在本地使用Cakephp 2.8在MAMP上开发了一个app并使用Chrome进行测试。我按照手册和tutorial实现了用Auth组件登录的用户。 一切都运作良好,但当我完成应用程序时,我尝试登录Safari和Firefox,但它无法正常工作。我收到了错误密码的身份验证错误,但是使用正确的密码,登录会将我重定向到主页(我的Jugadores控制器的索引),并且永远无法访问受Auth保护的操作,我被要求一遍又一遍地登录就像永远不会创建if会话一样。 当我在一个实时服务器中部署我的应用程序时,它在没有浏览器的情况下工作,这让我觉得我做错了但我找不到。

以下是我的AppController中的代码:

<?php

App::uses('Controller', 'Controller');

class AppController extends Controller {
    public $components = array(
        'Session',
        'Auth' => array(
        'loginRedirect' => array('controller' => 'jugadores', 'action' => 'index'),
        'logoutRedirect' => array('controller' => 'jugadores', 'action' => 'index'),
        'authError' => 'You can not access that page.',
        'authorize' => array('Controller')
        )
    );

    public function isAuthorized($user) {
        return true; //for simplicity. Is it wrong?
    }

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

}
?>

我的用户控制器是:

<?php
App::uses('AppController', 'Controller');

class UsersController extends AppController {

    public $components = array('Paginator', 'Flash', 'Session');

    public function beforeFilter() {
        parent::beforeFilter();
    }


    public function login() {
        if($this->request->is('post')){
            if($this->Auth->login()){
                return $this->redirect($this->Auth->redirectUrl());
            } else {
                $this->Flash->set('Wrong user/password.');
            }
        }
    }

    public function logout(){
        return $this->redirect($this->Auth->logout());
    }

}
?>

登录视图如下所示:

<div class="users view">
<h2>Login</h2>
<?php
    echo $this->Form->create('User');
    echo $this->Form->input('username');
    echo $this->Form->input('password');
    echo $this->Form->end('Enter');

?>
</div>

对于用户数据库,我遵循了Cakephp约定。字段:id,用户名,密码,角色,已创建,已修改

编辑:我把它放在AppController的beforeRender函数中:

$this->set('current_user', $this->Auth->user());

将其打印在布局default.ctp中:

print_r($current_user);

Chrome在本地服务器上测试时始终会打印登录的用户数据,但Firefox和Safari仅在请求受Auth保护的操作时打印(并将我带到登录页面)。 在实时服务器中,所有浏览器的行为都相同(记录的用户数据并不总是出现) 所以我认为Auth正在以某种方式工作并创建一个会话,但不应该表现得如此。

1 个答案:

答案 0 :(得分:0)

我尝试在CakePHP 2.8.0-RC1的新副本中实现Auth并获得相同的结果。 然后我尝试了CakePHP 2.7.9的全新副本,即使将我的控制器,视图和我的应用程序的其余部分复制到此安装后,所有浏览器和服务器中的一切都按预期工作:D

所以......这看起来像是2.8.0-RC1版本的错误。