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

Codeigniter实例和外部库对象:身份验证,codeigniter,authentication,configuration,static-libraries,Codeigniter,Authentication,Configuration,Static Libraries,我会尽可能清楚地解释我的问题。如果没有,告诉我 Mywebapp基于Codeigniter。在其中,我做了一个控制器,以显示用户上传的图像。通过这种方式,图像只能由成员或授权人员看到,并且不像facebook那样是公开的(图像地址只是散列的,但是公开的) 我还使用mpdf库从网页内容生成pdf。为了使用它,我在第三方目录中有mpdf库。为了能够在格式化时使用它,我将mpdf库(只是为了能够从不同的控制器使用它)放入库目录(在应用程序目录中)。我有一个pdf控制器,它是从我想要生成pdf的视图调用

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

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="" />

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

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

但如果我设置了限制,它不会。我知道mpdf对象是要求图像函数显示图像的对象。所以验证失败了

在调用pdf函数之前,我尝试在CI实例对象上使用config参数。例如,将“pdf_转换”设置为true,转换完成后,将其设置为false

但它不起作用。当我检查图像函数中的值时,它仍然为false。。。这就像不是所有对象的配置值都改变了一样,只是改变了它的pdf对象的配置值

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

提前感谢您的回答
Bastien

您的问题是,当库“调用”映像函数时,它没有登录。所以你的控制器代码拒绝访问

您可以做两件事:

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

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

  • 非主题:是否存在从控制器操作而不是直接引用映像文件来服务器映像的原因

    对解决方案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]
    }
    

    这就是想法,具体实施细节取决于您。

    非常感谢您的回答。我尝试了第二种方法,但没有找到检查请求是否来自pdf的方法。我没有试过。我尝试在CI中使用配置参数更改,但它不起作用。非常感谢。我尝试了第二种方法,但没有找到检查请求是否来自pdf的方法。我尝试在CI中使用配置参数更改,但不起作用。我会尝试第一种,但我不明白它会给我的问题带来什么变化。即使我将图像函数移动到库文件中,如果我检查身份验证,它也会失败,因为我的pdf对象无法进行身份验证。不为了回答您的问题,我的客户可以上传文档与他们的客户共享。我不想让他们的图片被访问,即使地址是散列的。你认为这太多了吗?当然!阅读你的解决方案,这样做似乎是合乎逻辑的。非常感谢:)我太乐观了。您的解决方案的体系结构很好,但我不能按照您在PDF库中所说的做。我使用mpdf,渲染图像的函数很复杂。我无法将源url更改为对库函数的调用。我想我会让一个直接进入的形象。另一个解决方案是使用javascript函数创建带有画布的数据uri图像(但只能在兼容html5的浏览器上使用)