我在我的网络应用程序中使用AJAX,例如搜索但是如果用户已经注销,则ajax函数不会返回任何内容,因为重定向(从动作'搜索'到动作'登录')尚未返回处理得当。
是否有可能在AppController中重新声明方法'redirect',以便在AJAX调用中重定向重定向时呈现正确的操作?
谢谢你, 塞巴斯蒂安
答案 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调用的结果并采取相应的行动。