我正在尝试在 CakePHP(2.1.1)中进行基本的用户登录身份验证,它似乎有效,因为它可以很好地重定向到用户/登录(在url字段)但是当我在这个页面上时,Firefox说:
页面未正确重定向。 Firefox检测到服务器正在以永远不会完成的方式重定向此地址的请求。有时可能会因禁用或拒绝接受Cookie而导致此问题。“
我在谷歌浏览器中遇到了同样的错误,所以我认为这是一个问题,它来自CakePHP方面的编码,特别是重定向循环。
在app \ Controller \ AppController.php中我放了:
<?php
App::uses('Controller', 'Controller');
class AppController extends Controller {
var $components = array('Auth');
}
?>
在app \ Controller \ UsersController.php中:
<?php
class UsersController extends AppController {
public $components = array(
'Session',
'Auth' => array(
'authenticate' => array('Basic')
)
);
public function login() {
if ($this->Auth->login()) {
return $this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash('Not able to login');
}
}
public function logout() {
$this->redirect($this->Auth->logout());
}
}
?>
app \ View \ Users \ login.ctp中
<?php
echo $this->Form->create('User', array('action' => 'login'));
echo $this->Form->input('login', array('label' => 'Login : '));
echo $this->Form->input('pass', array('type' => 'password', 'label' => 'Password : '));
echo $this->Form->end('Connexion');
?>
我真的不知道在哪里放置新代码或修改来停止这个重定向循环...:s
提前告诉我们!
答案 0 :(得分:0)
我在代码中看到两个位置,其中重定向可能发生在UserController-&gt; login()和UserController-&gt; logout()。确保已安装Firebug和Firephp。包括Firephp核心library:
require_once('FirePHPCore/FirePHP.class.php');
$firephp = FirePHP::getInstance(true);
然后在login()和logout()中添加这些行:
$firephp->log('Login() has been fired.');
$firephp->log('Logout() has been fired.');
打开Firebug中的网络面板,再次运行您的代码,如果“Login()已被触发”,则会在Firebug控制台输出中显示您正在执行重定向的login()函数。尝试使用firephp日志,无论您想知道脚本是否正常运行。您还可以将其记录到控制台,以便查看是否正确设置。
抱歉,我无法诊断问题的根源,但此建议可以帮助您排除故障。
答案 1 :(得分:0)
在AppController中,你应该像下面这样设置这三个值,可能是因为登录操作重定向到自身(登录页面),你应该将loginRedirect设置为登录页面以外的其他页面
public function beforeFilter() {
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'pages', 'action' => 'home');
}