我在本地开发了一款应用程序,在MAMP上用Cakephp 2.8,并使用Chrome进行测试。我按照手册和教程实现了用户使用身份验证组件登录。一切正常,但是当我完成应用程序时,我尝试登录Safari和Firefox,但没有用。我收到使用错误密码但使用正确密码的身份验证错误,登录会将我重定向到主页(我的 Jugadores 控制器的索引(,并且永远无法访问受身份验证保护的操作,我被要求一遍又一遍地登录,就像从未创建过 if 会话一样。当我在实时服务器中部署我的应用程序时,它无法在浏览器中工作,这让我认为我做错了什么,但我找不到什么。
这是我的应用控制器中的代码:
<?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 正在工作并创建一个会话,但没有按照应有的方式运行。
我尝试在CakePHP 2.8.0-RC1的新副本中实现身份验证,并得到了相同的结果。然后我尝试了 CakePHP 2.7.9 的新副本,即使在将我的控制器、视图和我的应用程序的其余部分复制到此安装:D之后,所有浏览器和服务器中的一切都按预期工作
所以......这看起来像是2.8.0-RC1版本的错误。