Magento, войдите как клиент от администратора - PullRequest
10 голосов
/ 14 сентября 2011

Я расширил Mage_Adminhtml_CustomerController новым действием loginAction, чтобы иметь возможность войти в систему как клиент из интерфейса администратора.

Я вызываю loginById на customer/session, но сеанс клиента не изменяется после перенаправления.

Может кто-нибудь объяснить, почему?Это должна быть простая операция.

Вот суть , содержащая loginAction

Я ценю любую помощь.

Спасибо!


Обновление:

Я создал github-репо, содержащий весь код для модуля: https://github.com/KATT/Magento-CustomerLogin.

После этогопроблема решена, это может быть полезно и кому-то еще.

Ответы [ 4 ]

9 голосов
/ 20 сентября 2011

Привет! Я создал способ авторизации в качестве клиента.С помощью следующего решения, приведенного ниже, вы можете получить действие в представлении управления сеткой клиента в бэкэнде для каждого клиента:

Необходимо создать контроллер для внешнего интерфейса и выполнить переписывание классов административного блока.Ваша ситуация, и не забудьте создать xml-файл, который активирует ваш модуль в app / etc / modules / Yourmodule_Customer.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 голос
/ 13 февраля 2013

Я понимаю, что на этот вопрос уже дан ответ, но для тех, кто ищет несколько иной (не говоря уже лучше) подход, вот расширение Magento, которое я написал https://github.com/ajzele/Inchoo_LoginAsCustomer. Он не переписывает никаких блоков, он использует событие /Наблюдатель вводит кнопку «Войти как клиент» на экране редактирования клиента.Кроме того, он использует комбинацию администратора и контроллера внешнего интерфейса для передачи зашифрованной информации о клиенте, чтобы он знал, какой клиент должен войти в систему.

0 голосов
/ 08 апреля 2013

Для тех, кто не хочет отлаживать решение, вы можете установить расширение через magento connect: http://www.magentocommerce.com/magento-connect/login-as-customer-9893.html Это позволяет войти в систему из представления клиентов и страниц просмотра заказа от администратора. Расширение стабильно и отлично работает во всех случаях

0 голосов
/ 14 сентября 2011

Разве вы не можете войти через модель клиента?

$customer = Mage::getModel('customer/customer');
$customer->setWebsiteId(Mage::app()->getWebsite()->getId());
$customer->loadByEmail($email);
OR
Mage::getSingleton('customer/session')->loginById($customer->getId());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...