2010-11-03 7 views
1

Après avoir lu quelques messages, j'essaye d'implémenter un observateur pour déclencher un événement avant la connexion de l'utilisateur. Je vais vous expliquer: j'ai un forum et un blog, en utilisant un autre framework, et je veux que le visiteur se connecte une seule fois: blog, forum ou eshop. Après cela, il sera connecté pour d'autres domaines. Par exemple, je navigue sur le forum et je me connecte au forum. Puis, quand j'ouvre la boutique, je suis déjà connecté. Et même chose pour le contraire.Magento: Événement de feu avant le processus de connexion

Cela fonctionne, mais juste un problème: quand je me suis connecté au forum/blog et si j'ouvre la boutique, j'ai besoin d'actualiser la page pour voir que je suis connecté.

En fait, c'est le même comportement que le processus standard de déconnexion Magento: si vous cliquez sur le lien "déconnexion" de votre boutique Magento, vous verrez toujours que vous êtes connecté. Il y a une redirection/actualisation vers la page d'accueil alors vous voyez le message que vous êtes déconnecté. Voici mon code:

app/code/communauté/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> 
[...] 

et: app/code/communauté/Fanxiang/UC/Aide/données. 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:. Je voudrais éviter de rafraîchir la page pour voir que je suis connecté Toute idée ou de l'aide est la bienvenue!

Yoong

Répondre

1

Comme vous l'avez vu http_response_send_before se produit après que le HTML est généré, mais avant qu'il ne soit envoyé par le serveur, de sorte que le Le statut connecté n'est pas visible. Vous devez utiliser un événement qui se produit avant que le code HTML soit mis en place, par exemple, controller_action_predispatch.

Here is a reference of several other possibilities

+0

GOOD! Ça marche. J'ai raté cet événement ... –

+0

De rien. (Merci de donner une réponse à cette réponse ;-) – clockworkgeek

0

La raison de ce comportement étrange semble être lié au fait que l'ensemble du cadre tourne Magento avant vraiment se déplacer aux contrôleurs et autres. Cela signifie que votre état de connexion précédent (déconnecté, dans ce cas) est enregistré avant l'exécution de votre code. C'est ma conjecture (bien que je n'ai pas parcouru tout le code) que vous pourriez réinitialiser quelques variables de session/registre pendant la connexion pour résoudre ce problème.

Si vous faites cela, s'il vous plaît revenir à contribuer Magento afin que nous pouvons tous partager :)

Questions connexes