1

所以在登录期间,我想检查用户是否在特定的客户组中,如果检查失败,则阻止登录。

我扩展了 AccountController,并在快速检查中添加了:

$customer = Mage::getModel('customer/customer')->loadByEmail($login['username']);
if ($customer->getGroupId() != 2) {
    $msg = Mage::getSingleton('core/session')->addError($this->__('You must have a wholesale account to access this area.'));
    header('Location: '. Mage::getUrl('customer/account/login'));
    exit;
}

但是,运行此命令会返回会话错误消息“使用网站范围时必须指定客户网站 ID”。

基本上,我只需要获取尝试登录的用户的组 ID,我想我可以通过客户模型中提供的方法 loadByEmail() 来获取它。但是,是的,现在是星期五,显然魔法领主希望我迟到。

我尝试了多种方法来使其正常工作,包括允许登录,然后检查 ID,然后在检查失败时执行 $session->logout() ,但这阻止了我在注销后显示会话错误消息() 方法正在清除所有会话消息(包括“核心/会话”)。

有任何想法吗?

4

1 回答 1

7

您应该website_id在使用loadByEmail方法之前进行设置。我知道,这看起来很奇怪,但这是由事实决定的,它customer可能是一个网站范围的实体。因此,如果模型未分配给任何网站,该loadByEmail方法将抛出异常。customer

$customer = Mage::getModel('customer/customer');
$customer->setWebsiteId(Mage::app()->getStore()->getWebsiteId())
        ->loadByEmail($login['username']);
于 2012-10-20T07:48:57.353 回答