首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP的MVC框架中验证控制器

在PHP的MVC框架中验证控制器
EN

Stack Overflow用户
提问于 2012-06-13 08:41:18
回答 1查看 119关注 0票数 2

我正在使用codeigniter框架,并尝试实现tankauth身份验证。它在普通页面上运行良好。在控制器的__construct中,我将

代码语言:javascript
复制
if (!authenticated) { redirect('auth'); }

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

当未登录的用户试图调用函数时,保护ajax调用并将用户重定向到auth页面的正确方法是什么?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-13 09:04:38

我一般不熟悉tankauth,所以可能有更好的方法,但一般来说,你需要返回一条消息(例如JSON),然后终止脚本,而不是重定向,而不是从控制器调用重定向。

进行Ajax调用的客户端Javascript然后检查响应,如果响应指示用户已注销,则使用javascript重定向到登录(window.location)。如果在通过Ajax请求的页面上发送重定向,则不会导致浏览器重定向,Ajax调用只是跟随重定向,Ajax调用的结果是登录页面返回的任何HTML。

因此,它可能看起来像这样:

代码语言:javascript
复制
if (!authenticated) {
    if (is_ajax_call) {
        echo json_encode(array('error' => 'loggedout'));
        exit;
    } else {
        redirect('auth');
    }
}

Javascript检查响应是否包含error密钥,如果是loggedout,它应该将用户的浏览器重定向到您的登录页面。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11006799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档