Magento EE -限制访问媒体文件夹,如果用户没有登录



我想限制已登录的用户访问资源(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。

这取决于您的规格,但我想知道为什么要从媒体目录中处理这个问题,而您已经有可下载的产品选项

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

我猜你所有的需要都在里面,如果你需要的东西没有实现,你可以自由地扩展和编写你自己的

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

试试这个:

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/app/Mage.php');
umask(0);
Mage::app();
if (Mage::getSingleton('customer/session')->isLoggedIn()) {
    // send data
}
else {
    // redirect
}

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

在做了更多的研究后,我想出了如何测试是否有一个登录用户:

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()方法,但如果您不使用cusotmerId和loginById方法"登录",isLoggedIn方法将始终返回false

相关内容

最新更新