我正在使用codeigniter框架,并尝试实现tankauth身份验证。它在普通页面上运行良好。在控制器的__construct中,我将
if (!authenticated) { redirect('auth'); }这样它就可以保护控制器中的所有功能。如果用户的凭据超时,并且他们尝试加载新页面,这将很好地工作,它只是将他们重定向到身份验证页面,以便他们可以再次登录。但是,如果通过ajax调用控制器中的函数,我会得到一个无限循环。我假设是因为它试图在页面已经加载时发送重定向标头。
当未登录的用户试图调用函数时,保护ajax调用并将用户重定向到auth页面的正确方法是什么?
谢谢!
发布于 2012-06-13 09:04:38
我一般不熟悉tankauth,所以可能有更好的方法,但一般来说,你需要返回一条消息(例如JSON),然后终止脚本,而不是重定向,而不是从控制器调用重定向。
进行Ajax调用的客户端Javascript然后检查响应,如果响应指示用户已注销,则使用javascript重定向到登录(window.location)。如果在通过Ajax请求的页面上发送重定向,则不会导致浏览器重定向,Ajax调用只是跟随重定向,Ajax调用的结果是登录页面返回的任何HTML。
因此,它可能看起来像这样:
if (!authenticated) {
if (is_ajax_call) {
echo json_encode(array('error' => 'loggedout'));
exit;
} else {
redirect('auth');
}
}Javascript检查响应是否包含error密钥,如果是loggedout,它应该将用户的浏览器重定向到您的登录页面。
https://stackoverflow.com/questions/11006799
复制相似问题