我在我的web-app东西中使用AJAX,比如搜索,但是如果用户已经注销,ajax函数不会返回任何内容,因为重定向(从操作'search'到操作'login' )未被正确处理。CakePHP 2 AJAX重定向
是否有可能在AppController中重新声明方法“重定向”,以便在AJAX调用中重定向时提供正确的操作?
谢谢 塞巴斯蒂安
我在我的web-app东西中使用AJAX,比如搜索,但是如果用户已经注销,ajax函数不会返回任何内容,因为重定向(从操作'search'到操作'login' )未被正确处理。CakePHP 2 AJAX重定向
是否有可能在AppController中重新声明方法“重定向”,以便在AJAX调用中重定向时提供正确的操作?
谢谢 塞巴斯蒂安
我觉得你最好的选择是设置你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,用户就会登录。
另一种方法是让每个人都获得了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调用,并采取相应的行动。
这是不可能的,因为我的大部分AJAX方法都是“标准”方法,并带有“$ this-> request-> is('Ajax')”条件。 –
但我不希望用户必须重新连接自己,我有一个cookie信息的自动登录功能。我希望在进行AJAX调用时,CakePHP检查用户是否已登录,如果不是,则自动重新连接hif。 –
@Sébastien查看我的更新。 – Dunhamzzz
好的,谢谢你。但是要知道,如果一个“从未登录过的用户”在公共页面中,并且触发了一个需要登录的AJAX事件,那么将会在该方法中重定向到登录页面(对于非Ajax调用)。所以AJAX返回将是空的(没有任何错误);如何不打破方法,做一个“伪重定向”,使登录页面返回到AJAX调用? –