Magento,从admin登录为客户

时间:2011-09-14 08:05:05

标签: php session magento login

我使用新操作Mage_Adminhtml_CustomerController扩展了loginAction,以便能够从管理界面以客户身份登录。

我呼叫loginById上的customer/session,但重定向后客户的会话未被修改。

有人可以解释原因吗?这应该是一个简单的操作。

Here's a gist包含loginAction

我感谢任何帮助。

谢谢!


更新

我创建了一个包含该模块所有代码的github-repo:https://github.com/KATT/Magento-CustomerLogin

一旦这个问题得到解决,它也可能对其他人有用。

4 个答案:

答案 0 :(得分:9)

您好我创建了一种以客户身份登录的方式。通过以下解决方案,您可以在后端的客户网格管理视图中为每个客户获取一个操作:

你必须为前端创建一个控制器并对一个管理块进行类重写,请适应你的情况,不要忘记在app / etc / modules / Yourmodule_Customer创建一个激活模块的xml文件。 XML 以下是您必须创建的模块的config.xml:

<?xml version="1.0"?>
<config>
<modules>
    <Yourmodule_Customer>
        <version>0.1.0</version>
    </Yourmodule_Customer>
</modules>
<global>
    <blocks>
      <adminhtml>
        <rewrite>
          <customer_grid>Yourmodule_Customer_Block_Adminhtml_Overwrite_Grid</customer_grid>
         </rewrite>
       </adminhtml>
</global>
<frontend>
    <routers>
        <customer>
            <args>
                <modules>
                    <customer before="Mage_Customer">Yourmodule_Customer_Overwrite</customer>
                </modules>
            </args>
        </customer>
    </routers>
</frontend>

然后,您必须在文件夹Youmodule / Customer / Block / Adminhtml / Overwrite / Grid.php中创建一个块类,其中包含以下内容: 请注意,如果激活了URL中的商店代码,则需要提供默认商店代码。

<?php
class Yourmodule_Customer_Block_Adminhtml_Overwrite_Grid extends Mage_Adminhtml_Block_Customer_Grid
{
    protected function _prepareColumns()
    {
        parent::_prepareColumns();

        $column = $this->getColumn('action');
        $actions = $column->getActions();
        $actions[] = array(
            'caption' => 'Log in',
            'popup' => true,
            'url' => array(
                'base' => 'customer/support/autologin',
                'params' => array('_store' => 'de', '_secure' => true)),
                'field' => 'customerid'
        );
        $column->setActions( $actions );

        return $this;
    }
}

然后你必须创建一个新的前端控制器,在这种情况下,它被限制在后端配置中定义的授权IP地址:

<?php
class Yourmodule_Customer_Overwrite_SupportController extends Mage_Core_Controller_Front_Action
{
    public function preDispatch(){

        parent::preDispatch();

        if (!$this->getRequest()->isDispatched()) {
            return;
        }

        $action = $this->getRequest()->getActionName();
        $pattern = '/^(autologin)/i';
        if (!preg_match($pattern, $action) && Mage::helper('core')->isDevAllowed(Mage::app()->getStore()->getId())) {
            if (!$this->_getSession()->authenticate($this)) {
                $this->setFlag('', 'no-dispatch', true);
            }
        } else {
            $this->_getSession()->setNoReferer(true);
        }
    }

    public function autologinAction(){
        $session = $this->_getSession();

        $id = (int) trim($this->getRequest()->getParam('customerid'));
        try{
            if($id){
                $customer = Mage::getModel('customer/customer')->load($id);
                $session->setCustomerAsLoggedIn($customer);
                $message = $this->__('You are now logged in as %s', $customer->getName());
                $session->addNotice($message);
                Mage::log($message);
            }else{
                throw new Exception ($this->__('Auto Loggin didn\'t worked. Some parameter are missing'));
            }
        }catch (Exception $e){
            $session->addError($e->getMessage());
        }
        $this->_redirect('customer/account');       
    }

    public function _getSession(){
        return Mage::getSingleton('customer/session');
    }
}

答案 1 :(得分:1)

我意识到这个问题已经得到了回答,但是对于那些寻找不同(不是说更好)方法的人来说,这里是我编写的https://github.com/ajzele/Inchoo_LoginAsCustomer的Magento扩展。它不会重写任何块,它使用事件/观察器在客户编辑屏幕上注入Login as Customer按钮。它进一步使用管理员和前端控制器的组合来传递加密的客户信息,以便知道要登录的客户。

答案 2 :(得分:0)

你不应该通过客户模式登录吗?

$customer = Mage::getModel('customer/customer');
$customer->setWebsiteId(Mage::app()->getWebsite()->getId());
$customer->loadByEmail($email);
OR
Mage::getSingleton('customer/session')->loginById($customer->getId());

答案 3 :(得分:0)

对于那些不想调试解决方案的人,可以通过magento connect安装扩展: http://www.magentocommerce.com/magento-connect/login-as-customer-9893.html 它允许从管理员的客户视图和订单视图页面登录。扩展是稳定的,并且在所有情况下都能正常工作