加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 使用身份验证保护CodeIgniter 2应用程序的正确方法是什么

发布时间:2020-12-13 22:04:43 所属栏目:PHP教程 来源:网络整理
导读:我已正确安装 Ion Auth 并在我的服务器上运行.我也有默认的CodeIgniter 2“新闻”教程在同一个CI安装中工作.我只是在玩耍并且对使用身份验证系统“封闭”或保护整个应用程序的正确方法感到好奇. 对于这个问题,让我们使用CI附带的“新闻”教程. 在我的news.ph
我已正确安装 Ion Auth并在我的服务器上运行.我也有默认的CodeIgniter 2“新闻”教程在同一个CI安装中工作.我只是在玩耍并且对使用身份验证系统“封闭”或保护整个应用程序的正确方法感到好奇.

对于这个问题,让我们使用CI附带的“新闻”教程.

在我的news.php控制器中的index()函数内,我添加了条件代码来检查用户是否已登录.如果没有,则用户刚刚进入登录屏幕.

public function index() {
    $data['news'] = $this->news_model->get_news();
    $data['title'] = 'News archive';
    if ($this->ion_auth->logged_in()) {
        $this->load->view('templates/header',$data);
        $this->load->view('news/index',$data);
        $this->load->view('templates/footer');
    } else {
        redirect('auth/login','refresh');
    }
}

我可以看到它的工作原理,但直接的缺点是控制器中的每个函数也必须使用类似的条件逻辑进行修改,以保护所有其他页面视图.例如 – 检查登录,显示页面,否则转到登录页面……一遍又一遍.

这是应该做的吗?

如果一个应用程序已经构建并正在运行并且只是想保护它们怎么办?添加条件逻辑以检查控制器内每个页面视图的登录状态似乎不必要地冗长.

可以在一个地方保护整个应用程序(所有视图)以最小化代码修改吗?如果是这样,怎么样?

解决方法

要保护整个控制器,您可以将auth检查放入__construct()调用中,如eric.itzhak所述.

要保护整个应用程序,可以扩展CI_Controller类,将auth放在该文件的构造函数中,最后通过MY_Controller而不是CI_Controller在每个控制器中进行扩展.

代码示例:

/* File: application/core/MY_Controller.php */
class MY_Controller extends CI_Controller
{
    function __construct()
    {
        parent::__construct();

        if ( ! $this->ion_auth->logged_in())
        {
            redirect('auth/login');
        }
    }
}

然后,在每个控制器中(注意MY_Controller,而不是CI_Controller):

class Controller_name extends MY_Controller
{
    function __construct()
    {
        parent::__construct();
    }

    // rest of controller methods
}

这些代码示例假设您是自动加载(您可能也是)离子auth库.如果没有,请根据需要在MY_Controller文件中加载库.

这种方法有两个优点:

>您只需要在要保护的每个控制器中将CI_Controller更改为MY_Controller.>如果您需要一个不受保护的控制器,即包含auth方法的控制器,您不必保护所有有用的东西(如果您的auth控制器要求您登录,则无法登录:P – – 将有一个重定向循环).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读