CakePHP 2 AJAX重定向

时间:2011-11-23 15:25:07

标签: ajax cakephp redirect cakephp-2.0

我在我的网络应用程序中使用AJAX,例如搜索但是如果用户已经注销,则ajax函数不会返回任何内容,因为重定向(从动作'搜索'到动作'登录')尚未返回处理得当。

是否有可能在AppController中重新声明方法'redirect',以便在AJAX调用中重定向重定向时呈现正确的操作?

谢谢你, 塞巴斯蒂安

2 个答案:

答案 0 :(得分:2)

我认为您最好的选择是设置ajax来调用以正确响应无效响应。因为它似乎是你的应用程序的一个重要部分,我会传递一个'loggedin'变量与每个ajax请求,所以客户端可以告诉用户一旦注销。

<强>更新

如果您希望让用户保持登录状态,您只需将登录的/ cookie检查放在类似于AppController::beforeFilter()的每个请求中运行的内容中。例如:

public function beforeFilter() {
     if($this->Auth->user() {
          // USer is logged in, it's all gravy
     } else {
         // User is not logged in, try to log them in
         $userData = $this->Cookie->read('User');
     if(!empty($userData)) {
              // Function that grabs info from cookie and logs in user
         }
     }
}

这样就不会有重定向,因为用户只要有cookie就会登录。

答案 1 :(得分:1)

另一种方法是允许每个人访问Ajax函数:

public function beforeFilter() {
  $this->Auth->allow(array('my_ajax_method'));
}

然后检查用户是否在方法本身中进行了身份验证:

public function my_ajax_method() {

    if (!$this->Auth->user()) {
       //user not authenticated
       $result = "requires auth";
    }
    else {
       // use is authenticated
       // do stuff
       $result = 'result of stuff';
    }

    $this->set(compact('result'));

}

您需要在javascript中检查ajax调用的结果并采取相应的行动。