Magento EE - 如果用户未登录,则限制对媒体文件夹的访问

时间:2014-07-29 21:04:07

标签: magento

我想限制对已登录的用户访问资源(pdf,doc,docx等)文件。

资源位于/ var / www / html / media / wysiwyg /...

因此,如果有人试图访问URL http://domain/media/wysiwyg/sales.pdf,我想将它们重定向到登录页面,如果他们没有登录。

我计划使用.htaccess重写并通过.php程序将所有访问尝试包装到受限文件中,该程序将检查用户是否已登录 - 但我不确定如何检查用户是否已登录状态。

我试过了:

require_once 'app/Mage.php';

Mage::app('', ''); 

//GET SESSION DATA

Mage::getSingleton('core/session', array('name'=>'frontend'));

$session = Mage::getSingleton('customer/session', array('name'=>'frontend'));

if($session->isLoggedIn()){
// send data
}
else
{
// redirect to login page
}

但isLoggedIn()始终为false。

任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:0)

这取决于您的规格,但我想知道为什么要从媒体目录中处理此问题,而您已经拥有downloadable product选项

  • 您可以从管理面板
  • 进行设置
  • 按客户角色进行自定义
  • 将其作为免费产品
  • 限制下载次数
  • 您甚至可以将其与其他产品捆绑在一起(如果您销售带有其文档的机器)

我想你的所有需求,如果有你需要的东西没有实现,请随意扩展并编写自己的

如果你想更新你的问题,请更新它,我很乐意帮助:)

答案 1 :(得分:0)

试试这个:

<?php

require_once($_SERVER['DOCUMENT_ROOT'] . '/app/Mage.php');
umask(0);
Mage::app();

if (Mage::getSingleton('customer/session')->isLoggedIn()) {
    // send data
}
else {
    // redirect
}

答案 2 :(得分:0)

可下载的产品选项不太符合我们的需求 - 我们有许多资源页面需要更新,新文件会上传到媒体文件夹。

在进行更多研究时,我想出了如何测试是否有登录用户:

require_once 'app/Mage.php';

Mage::app();

$coreSession = Mage::getSingleton('core/session', array('name' => 'frontend'));

if(isset($coreSession['visitor_data']['customer_id'])){
  // there is a customer id, so someone is logged in
  // send the file
}
else
{
   // redirect to login page, or a page that explains why the link doesn't work
}

如果您想获取有关登录用户的信息,您必须首先实际使用loginById方法:

if(isset($coreSession['visitor_data']['customer_id'])){
   $customerId = $coreSession['visitor_data']['customer_id'];

   // Load the user session.
   Mage::getSingleton('customer/session')->loginById($customerId);

   $customerSession = Mage::getSingleton("customer/session");

   // Load customer
   $customer = $customerSession->getCustomer();
}

当您搜索如何验证客户是否已登录时,会显示许多解决方案,显示$ customerSession的isLoggedIn()方法的使用,但如果您没有&#39;登录&#39;使用cusotmerId和loginById方法,isLoggedIn方法将始终返回false。