Magento: событие Fire перед процессом входа - PullRequest
1 голос
/ 03 ноября 2010

После прочтения некоторых постов я пытаюсь внедрить наблюдателя для запуска события перед входом пользователя.Я объясню: у меня есть форум и блог, использующий другой фреймворк, и я хочу, чтобы посетитель входил в систему только один раз: блог, форум или интернет-магазин.После этого он будет зарегистрирован для других областей.Например, я просматриваю форум и захожу на форум.Затем, когда я открываю магазин, я уже вошел в систему. И то же самое для обратного пути.

Это работает, но только одна проблема: когда я захожу на форум / блог и открываю магазин, мне нужно обновить страницу, чтобы увидеть, что я вошел в систему.

На самом деле,это то же самое поведение, что и при стандартном процессе выхода из Magento: если вы нажмете на ссылку «выход» из вашего магазина Magento, вы все равно увидите, что вы вошли в систему. Существует перенаправление / обновление на домашнюю страницу, а затем вы видите сообщениеВы вышли из системы.Вот мой код:

app / code / community / Fanxiang / UC / etc / config.xml:

[...]
<events>
<http_response_send_before>
 <observers>
  <UC>
   <type>model</type>
   <class>Fanxiang_UC_Helper_Data</class>
   <method>ucSynlog</method>
  </UC>
 </observers>
</http_response_send_before>
</events>
[...]

и: app / code / community / Fanxiang / UC / Helper /Data.php

class Fanxiang_UC_Helper_Data extends Mage_Core_Helper_Abstract
{
     public function ucSynlog($observer){
         if(!empty($_COOKIE['Example_auth'])){
             list($Example_uid, $Example_username) = explode("\t", uc_authcode($_COOKIE['Example_auth'], 'DECODE'));
             list($Example_uid, $Example_username,$email)        =uc_get_user($Example_username);
             $customer = Mage::getModel('customer/customer')->setWebsiteId(Mage::app()->getStore()->getWebsiteId())->loadByEmail($email);
             Mage::getSingleton('customer/session')->setCustomerAsLoggedIn($customer);
         } else {
             Mage::getSingleton('customer/session')->logout();
         }
         Mage::log(time(), null, "logfile.log"); 
     }
}

PB: Я хотел бы не обновлять страницу, чтобы увидеть, что я вошел в систему. Любая идея или помощь приветствуется!

Yoong

Ответы [ 2 ]

1 голос
/ 03 ноября 2010

Как вы уже видели, http_response_send_before происходит после того, как HTML сгенерирован, но до того, как он будет отправлен сервером, поэтому зарегистрированный статус не виден.Вам нужно использовать событие, которое происходит до того, как какой-либо HTML-код составлен, скажем, controller_action_predispatch.

Вот ссылка на несколько других возможностей

0 голосов
/ 03 ноября 2010

Причина странного поведения, по-видимому, связана с тем, что вся среда для Magento раскручивается до того, как реально обойти контроллеры и тому подобное.Это означает, что ваше предыдущее состояние входа (в данном случае вышло из системы) записывается до запуска вашего кода.Я думаю (хотя я не пробежал весь код), что вы можете сбросить несколько переменных сеанса / реестра во время входа в систему, чтобы решить эту проблему.

Если вы сделаете это, пожалуйста, отправьте его обратно в Magentoчто мы все можем поделиться :) 1003 *

...