Codeigniter实例和外部库对象:验证

时间:2012-08-15 10:50:06

标签: codeigniter authentication configuration static-libraries

我会尽可能清楚地解释我的问题。如果没有,请告诉我!

Mywebapp基于Codeigniter。在其中,我做了一个控制器,以显示用户上传的图像。通过这种方式,图像只能由成员或授权人员看到,并且不像Facebook中那样是公开的(图像地址只是经过哈希处理但是是公开的)。

我还使用mpdf库从网页内容生成pdf。要使用它,我在第三方目录中有mpdf库。为了能够将它与我的格式化一起使用,我将库目录(在应用程序目录中)放入我的mpdf库(只是为了能够从不同的控制器中使用它)。我有一个pdf控制器,从我想要生成pdf的视图中调用。

所以过程是:我从我的视图中调用pdf控制器的一个函数。在这个函数中,我调用了我的mpdf库的一个函数,它创建了一个mpdf对象(第三方类)并生成了pdf。

pdf的生成效果很好。我唯一的是图像。我解释。在我的html文档中,图像嵌入如下:

<img src="http:localhost/www/myapp/library/image/hashed_name_of_the_image" alt="" />

库控制器的图像功能检索图像并显示它。但是在这个函数中,我可以保护或不运行它的访问权限。例如,强制成为已登录用户以查看图像(if($this->session->userdata(‘logged’) == true))。

如果没有限制,生成的pdf包含图像。酷:))。

但如果我提出限制,那就没有了。据我所知,mpdf对象是要求图像功能显示图像的对象。所以验证失败了。

在调用pdf函数之前,我尝试在CI实例对象上使用config参数。例如,设置为true a&#34; pdf_conversion&#34;并且转换完成后,将其设置为false。

但它不起作用。当我检查图像功能中的值时,它仍然是假的......就像所有对象的配置值都没有改变,但只有改变了它的pdf对象。

有办法做我想做的事吗???使用config参数或其他任何东西!我想我误解了一些事情,但不知道是什么!

感谢前进的答案 巴斯蒂安

1 个答案:

答案 0 :(得分:0)

你的问题是,然后库“调用”图像功能,它没有登录。所以你的控制器代码拒绝访问。

您可以做两件事:

  1. 将生成/获取图像的代码从控制器移动到新库中。然后从控制器和PDF库中调用该库。这是首选方式。

  2. 在“图片”操作中,找到检查请求是否来自PDF库的方法。最好的猜测是在PDF库发送的HTTP头中查找内容。无论如何,这不是很安全,因为HTTP标头可以“伪造”。

  3. OFF主题:您是否有理由从控制器操作服务图像而不是直接引用图像文件?

    解决方案1 ​​

    的澄清

    所以你将拥有一个看起来像这样的库image.php

    class Image {
      ...
      function get_image($hash){
        [code for getting the image here]
      }
      ... 
    }
    

    在控制器中:

    function image($hash) {
      $this->load->library('image');
    
      if (if($this->session->userdata(‘logged’) == true)) {
        $image = $this->image->get_image($hash);
    
        [send it to the browser]
      }
    }
    

    在PDF库中

    function export($hash) {
      $ci =& get_instace();
    
      $ci->load->library('image');
    
      [do pdf stuff]
    
      $image = $ci->image->get_image($hash);
    
      $this->add_image($image);
    
      [do more pdf stuff]
    }
    

    这是一个想法,实施的实际细节取决于你。