Blog

Comment restreindre la navigation aux utilisateurs connectés sous Magento ?

MagentoCertain sites demandent à l’utilisateur d’être connecté pour pouvoir naviguer dessus, l’accès direct à une page (catégorie ou collection par exemple) renvoyant vers un formulaire de connexion.

Obtenir ce comportement n’est pas natif dans Magento, il peut cependant s’obtenir sans développement compliqué ou fastidieux.

 

 

Étape 1 :

 

L’évènement « controller_action_predispatch » est appelé à chaque chargement de page, nous pouvons donc l’écouter pour contrôler qu’un utilisateur est connecté avant toute action.

 

Étape 2 :

 

Déclarer l’évènement dans le fichier de configuration du module (config.xml) :

[…]

    <frontend>

        <events>

            <controller_action_predispatch>

                <observers>

                    <nom-du-module>

                        <class> nom-du-module /observer</class>

                        <method>redirectNotLoggedIn</method>

                    </ nom-du-module >

                </observers>

            </controller_action_predispatch>

        </events>

    </frontend>

</config>

 

 

Étape 3 :

 

Définir la méthode « redirectNotLoggedIn » appelée dans le modèle « observer » du module :

 

 

    public function redirectNotLoggedIn(Varien_Event_Observer $observer) {

        if(Mage::helper('customer')->isLoggedIn()){

                return $this ;//ne rien faire, l’utilisateur est connecté

        }

       

        $action = strtolower(Mage::app()->getRequest()->getActionName());

        $controller = strtolower(Mage::app()->getRequest()->getControllerName());

       

        //ne pas empêcher d’accéder aux pages utilisées lors de la création d’un compte

        $allowed_actions = array(

            'create',

            'createpost',

            'login',

            'loginpost',

            'logoutsuccess',

            'forgotpassword',

            'forgotpasswordpost',

            'resetpassword',

            'resetpasswordpost',

            'confirm',

            'confirmation'

        );

       

        if ($controller != 'account' || !in_array($action, $ allowed_actions)) { //vérification du contrôleur et de l’action appelée

            Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('customer/account/login'));

        } else {

            return $this ;//ne rien faire, l’utilisateur peut accéder à la page demandée même sans connexion

        }

    }

  

Vous savez maintenant comment restreindre la navigation aux utilisateurs connectés sous Magento.

 

Si vous utilisez un système qui n’est pas natif Magento ou si certaines pages doivent être accessibles sans connexion, il est possible d’adapter les pages autorisées.

 

Nous avons mise en place ce système pour l’un de nos clients, sur un Magento CE 1.9 mais devrait fontionner de la même manière sur d’autres versions Magento.

Laissez-nous un commentaire pour nous dire si cela a fonctionné pour vous !