После долгих проб и ошибок я создал следующую работу. Это основано на ситуации, когда вход в систему управляется платформой, отличной от Magento.
Мне не удалось найти способ поделиться сессией с Magento, которая была инициализирована за пределами Magento. Вместо этого я создал простое расширение Magento, которое подключается к наблюдателю событий 'http_response_send_before'.
Теперь, когда Magento загружает страницу, модуль проверяет, вошел ли пользователь в другую систему. Если так, он получает электронную почту этого пользователя и регистрирует пользователя в Magento, используя адрес электронной почты в качестве идентификатора, и устанавливает сеанс для этого клиента. Очевидно, что клиент должен уже существовать в Magento, чтобы войти в систему.
Вот файлы и код, содержащийся внутри. Не стесняйтесь изменять для работы с вашей системой.
/ приложение / код / местные / Verve / Session / и т.д. / config.xml
<config>
<modules>
<Verve_Session>
<version>0.5.1</version>
</Verve_Session>
</modules>
<frontend>
<events>
<http_response_send_before>
<observers>
<session_login>
<type>model</type>
<class>Verve_Session_Helper_Login</class>
<method>loginEvent</method>
</session_login>
</observers>
</http_response_send_before>
</events>
</frontend>
/ приложение / код / местные / Verve / Session / Helper / login.php
class Verve_Session_Helper_Login extends Mage_Core_Helper_Abstract
{
static function loginEvent($observer) {
$session = Mage::getSingleton('customer/session');
if (!$session->isLoggedIn()) {
YOUR CODE HERE, FIND EMAIL OF LOGGED IN USER
if(@$email){
$customer = Mage::getModel('customer/customer');
$customer->loadByEmail($email);
$session = Mage::getSingleton('customer/session');
$session->start();
$session->setCustomer($customer);
$url = $_SERVER['REQUEST_URI'];
Mage::app()->getFrontController()->getResponse()->setRedirect($url);
}
}
}
}
/ приложение / и т.д. / модули / Verve_Session.xml
<config>
<modules>
<Verve_Session>
<active>true</active>
<codePool>local</codePool>
</Verve_Session>
</modules>
</config>