2011-11-23 125 views
1

我在我的web-app东西中使用AJAX,比如搜索,但是如果用户已经注销,ajax函数不会返回任何内容,因为重定向(从操作'search'到操作'login' )未被正确处理。CakePHP 2 AJAX重定向

是否有可能在AppController中重新声明方法“重定向”,以便在AJAX调用中重定向时提供正确的操作?

谢谢 塞巴斯蒂安

回答

2

我觉得你最好的选择是设置你AJAX来调用正确到一个无效的响应来响应。由于它似乎是您的应用程序的重要组成部分,因此我会在每个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,用户就会登录。

+0

但我不希望用户必须重新连接自己,我有一个cookie信息的自动登录功能。我希望在进行AJAX调用时,CakePHP检查用户是否已登录,如果不是,则自动重新连接hif。 –

+1

@Sébastien查看我的更新。 – Dunhamzzz

+0

好的,谢谢你。但是要知道,如果一个“从未登录过的用户”在公共页面中,并且触发了一个需要登录的AJAX事件,那么将会在该方法中重定向到登录页面(对于非Ajax调用)。所以AJAX返回将是空的(没有任何错误);如何不打破方法,做一个“伪重定向”,使登录页面返回到AJAX调用? –

0

另一种方法是让每个人都获得了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调用,并采取相应的行动。

+0

这是不可能的,因为我的大部分AJAX方法都是“标准”方法,并带有“$ this-> request-> is('Ajax')”条件。 –