用于ajax调用的CakePHP登录函数

时间:2013-07-14 12:27:01

标签: cakephp

所以这是情况:

我正在使用Js助手在CakePHP中创建ajax登录表单,并将其放在我的视图中:

<?php 
$data = $this->Js->get('#UserLoginForm')->serializeForm(array('isForm' => true, 'inline' => true));
      $this->Js->get('#UserLoginForm')->event(
        'submit',
        $this->Js->request(
          array ('controller' => 'users', 'action' => 'login'),
          array (
                  'update' => '#messagediv',
                  'before' => '$("#loading").fadeIn()',
                  'complete' => '$("#loading").fadeOut()',
                  'data' => $data,
                  'async' => true,    
                  'dataExpression'=>true,
                  'method' => 'POST',
                )
          )
      );
?>

然后在下面我有我的表格,下面的表格我有:

<?php echo $this->Form->create('User');
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->end('submit);
?>


<?php echo $this->Js->writeBuffer(); ?>

现在我不知道如何在控制器中使用正确的功能来检查登录和重定向是否成功或显示错误,如果没有..

如果登录deatils正确,我能够制作检查登录和echo 1的东西,如果没有,我能够回显0但是每当我尝试在控制器功能中使用重定向时它只在div #messagediv中加载“整个登录页面”。

这就是我的控制器动作现在的样子:

public function login() {
    if ($this->request->isAjax()) {
      $this->layout = 'ajax';

      if ($this->Auth->login()) {
        $this->Session->setFlash('Login Successfull');
      } else {
        $this->Session->setFlash('Login Incorrect');
      }

    }
  }

谁能告诉我我做错了什么?

那么如何在登录成功后重定向以及如果错误的用户名或pw如何将错误消息输出到#messagediv?

2 个答案:

答案 0 :(得分:1)

如果我理解你正在尝试做什么(只加载flash信息而不是整页),请改变你的行动:

public function login() {
    if ($this->request->isAjax()) {
        $this->layout = 'ajax';

        if ($this->Auth->login()) {
            $this->Session->setFlash('Login Successfull');
            $this->redirect('wherever');
        } else {
            $this->Session->setFlash('Login Incorrect');
            $this->render('messagediv');
        }    
    }
}

然后在View / Users / messagediv.ctp中创建一个仅包含echo $this->Session->flash();

的视图

可能有其他方法可以做得更好,但我不确定取决于你的具体用途。这应该解决你想要做的事情(如果我没有记错的话)。

答案 1 :(得分:0)

尝试将RequestHandler添加到$ components数组中。

var $components = array("RequestHandler");