Events Magento:在登录过程之前触发事件

Events Magento:在登录过程之前触发事件,events,magento,login,observer-pattern,Events,Magento,Login,Observer Pattern,在阅读了一些文章之后,我试图实现一个观察器,在用户登录之前触发一个事件。我会解释:我有一个论坛和一个博客,使用另一个框架,我希望访问者只登录一次:博客、论坛或eshop。之后,他将被记录到其他区域。例如,我正在浏览论坛并登录论坛。然后,当我打开商店时,我已经登录了。同样的道理也适用于相反的方式 它可以工作,但只有一个问题:当我登录论坛/博客,如果我打开商店,我需要刷新页面,以查看我是否已登录 事实上,这与标准Magento注销过程的行为相同:如果您单击Magento商店的“注销”链接,您仍然会看

在阅读了一些文章之后,我试图实现一个观察器,在用户登录之前触发一个事件。我会解释:我有一个论坛和一个博客,使用另一个框架,我希望访问者只登录一次:博客、论坛或eshop。之后,他将被记录到其他区域。例如,我正在浏览论坛并登录论坛。然后,当我打开商店时,我已经登录了。同样的道理也适用于相反的方式

它可以工作,但只有一个问题:当我登录论坛/博客,如果我打开商店,我需要刷新页面,以查看我是否已登录

事实上,这与标准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>
[...]
PB:我希望避免刷新页面以查看我已登录。 欢迎任何意见或帮助


Yoong

这种奇怪行为的原因似乎与这样一个事实有关,即Magento的整个框架在真正接触控制器之前就已经启动了。这意味着在代码运行之前会记录您以前的登录状态(在本例中为注销状态)。我猜(虽然我还没有运行所有的代码),您可以在登录期间重置一些会话/注册表变量来解决这个问题


如果您这样做,请将其提交回Magento,以便我们可以共享:)

这种奇怪行为的原因似乎与这样一个事实有关,即Magento的整个框架在真正接触到控制器等之前就启动了。这意味着在代码运行之前会记录您以前的登录状态(在本例中为注销状态)。我猜(虽然我还没有运行所有的代码),您可以在登录期间重置一些会话/注册表变量来解决这个问题


如果您这样做,请将其贡献回Magento,以便我们可以共享:)

正如您所看到的
http\u response\u send\u before
发生在HTML生成之后,但在服务器发送之前,因此登录状态不可见。您需要使用在任何HTML组合在一起之前发生的事件,例如,
controller\u action\u predispatch


正如您所看到的
http\u response\u send\u before
发生在HTML生成之后但服务器发送之前,因此登录状态不可见。您需要使用在任何HTML组合在一起之前发生的事件,例如,
controller\u action\u predispatch

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"); 
     }
}