2

我正在使用 codeigniter 框架,并且正在尝试实现 tankauth 身份验证。它适用于常规页面。在控制器的 __construct 中,我把

if (!authenticated) { redirect('auth'); }

在那里,它可以保护控制器中的所有功能。如果用户的凭据超时并且他们尝试加载新页面,这将正常工作,它只是将他们重定向到身份验证页面,以便他们可以再次登录。但是,如果通过 ajax 调用控制器中的函数,我会得到一个无限循环。我假设是因为它正在尝试在页面已加载时发送重定向标头。

当没有登录的人尝试调用该函数时,保护 ajax 调用并将用户重定向到身份验证页面的正确方法是什么?

谢谢!

4

1 回答 1

0

我一般不熟悉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,则应将用户的浏览器重定向到您的登录页面。

于 2012-06-13T01:04:37.690 回答