CakePHP 2.1.1>基本身份验证(用户/登录)的重定向错误

时间:2014-01-06 15:17:29

标签: php arrays forms cakephp redirect

我正在尝试在 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

提前告诉我们!

2 个答案:

答案 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');
}