Comment savoir si un client est connecté ou non à Magento 2.
Si le client est connecté, comment obtenir les données client de la session?
magento2
customer
login
customer-account
customer-session
Rakesh Jesadiya
la source
la source
text/x-magento-init
), vous pouvez économiser un temps système en évitant l'instanciation d'ObjectManager et en transmettant le statut à l'objet de configuration du module. Vous pouvez également demander le lien de connexion dans le module JS, par exemple:var isLoggedIn = $('.authorization-link > a').attr('href').indexOf('/login')<0;
Réponses:
Après le code, vous pouvez vérifier la connexion du client ou pas n'importe où
Du contrôleur
la source
Rappel important: il ne faut jamais appeler directement le gestionnaire d'objets
Voici donc comment le faire de façon propre
Dans toutes les classes sauf les modèles
Vous devez d’abord injecter la classe suivante dans votre constructeur
/Magento/Customer/Model/Session
:Ensuite, dans votre classe, vous pouvez appeler le suivant:
Dans un modèle
Cela nécessite un peu plus de travail dans un modèle car vous devrez configurer une préférence pour le bloc qui le rend propre à le faire:
Ensuite, dans votre contrôleur de bloc personnalisé, vous devez suivre la même injection de dépendance que pour toute classe (expliquée ci-dessus).
L' étape supplémentaire consiste à créer une méthode publique pouvant être utilisée dans votre modèle pour vérifier si un client est connecté ou non.
Ensuite, dans votre modèle, vous pouvez appeler:
Alternative si la session client n'est pas encore initialisée
Il y a une autre façon de le faire qui implique d'utiliser
Magento\Framework\App\Http\Context
au lieu deMagento/Customer/Model/Session
Ensuite, vous pouvez appeler
$this->_context->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH)
au lieu de$this->_session->isLoggedIn()
vérifier si le client est connecté ou non.Cependant, cette méthode pouvant donner des résultats différents , je vous suggère de lire cette excellente réponse pour plus d'informations: https://magento.stackexchange.com/a/92133/2380
la source
<preference ... />
balise dans un thème personnalisé? Que sont exactementBlock\That\Renders\The\Template
etVendor\Module\Block\Your\Custom\Block
?class Html extends \Magento\Framework\View\Element\Template
endroit où je peux injecter l'objet de session dans le constructeur. J'utilise ce bloc dans mon thème personnalisé de cette manière ( à partir de fichiers xml de mise en page):<block class="Vendor\ThemeName\Block\Html" template="Vendor_ModuleName::html/my-custom-template.phtml"/>
. Je voudrais vérifier l'utilisateur connecté dans le fichier de modèlemy-custom-template.phtml
. Comment devrais-je utiliser la balise `<préférence ... />?C'est possible via
Magento\Framework\App\Http\Context
ou viaMagento\Customer\Model\Session
. Cependant, le résultat peut être différent:PageCache
module est\Magento\PageCache\Model\Layout\DepersonalizePlugin::afterGenerateXml
activé (probablement toujours en production), gardez à l'esprit que dès que la génération de la présentation a commencé, la session du client est effacée de toutes les pages pouvant être mises en cache. Cela signifie que si vous vérifiez maintenant si le client est connecté via HTTP, il indiquera toujours «oui», mais les données du client ne seront plus disponibles dans la session client. Un double contrôle est donc nécessaire avant d'essayer d'accéder aux données dans une session client. Cela peut facilement se produire en bloc, bien qu’il soit improbable dans le contrôleur d’action puisque vous n’êtes pas censé y générer manuellement la présentation, elle sera générée après que le contrôleur d’action ait renvoyé une instance deResultInterface
Pour éliminer tout risque d'incohérence décrite lorsque PageCache est activé, envisagez d'utiliser une session client si celle-ci est déjà initialisée (true pour les contrôleurs d'action). Sinon, utilisez le contexte HTTP.
la source
la source
Aucune de ces solutions n'a fonctionné pour moi. Certaines pages semblent être connectées mais d'autres pas. Il semble que ce soit le bug:
https://github.com/magento/magento2/issues/3294
J'ai fini par créer un assistant que je pouvais appeler dans mes modèles:
Ensuite, je pourrais utiliser l’assistant dans mes modèles comme suit:
la source
->getCustomer()->getName()
utilisant le contexte, car si j'utilise la session ne fonctionne pas pour toutes les pages.Pour que l'utilisateur soit connecté au modèle, vous pouvez simplement appeler helper sur une seule ligne:
la source
Aucune des solutions présentées ici ne fonctionnait de manière fiable dans Magento v2.1 avec la protection contre le cache Page complet et Varnish activées en mode Production. J'ai finalement trouvé une solution qui fonctionnait 100% du temps avec toute la mise en cache activée après avoir eu l'idée
vendor/magento/module-theme/view/frontend/templates/html/header.phtml
. Voici ma solution, qui affiche un lien "Sign In" lorsque l'utilisateur est déconnecté et un lien "Déconnexion" lorsque l'utilisateur est connecté:MISE À JOUR: Depuis la version 2.1.5, cette solution n'est plus fiable. Voir le numéro 9156 pour une solution.
la source
cachable="false"
dans la mise en page XML pour ce bloc, mais le vernis le cache toujours apparemment. Pas sûr que ce soit un bug ou non, mais Knockout est un bon moyen de le contourner. Le seul inconvénient est qu'il reste un peu de temps avant que le lien Sign In / Out ne s'affiche en raison de la liaison KO.Il y a beaucoup de réponses là-bas qui vont quelque chose comme ça ...
OBTENIR UN GESTIONNAIRE D'OBJETS MODÈLE DE CLASSEMENT
C'est la méthodologie WRONG à utiliser dans Magento 2.0. En 2.0, les fabriques d'objets générées automatiquement sont la solution. Vous pouvez les injecter dans votre constructeur dans presque toutes les classes et les utiliser. Exemple:
la source
\Magento\Customer\Model\SessionFactory $sessionFactory
.Bonjour a la réponse ici:
Source .
Remplacer get par create fonctionne maintenant très bien:
la source
ObjectManager
directementC’est aussi l’une des solutions "Vérifier si le client est connecté ou non à Magento2"
Essayez ci-dessous le code:
la source
Essayez ci-dessous le code:
Pour utiliser le code ci-dessus dans un fichier phtml, vous pouvez appeler la fonction isLoggedIn () en tant que:
J'espère que cette aide merci.
la source
J'ai la meilleure solution. Il est basé sur l' authentification du client . Une partie de la session cliente ne fonctionnait pas, mais chaque fois que ma solution fonctionnerait. Nous allons jeter un coup d'oeil.
Merci.
la source
Solution actuellement utilisée (IMHO)
la source
Si vous voulez vérifier le client connecté ou non, utilisez ce code dans les fichiers phtml,
la source
ObjectManager
directement et vous ne devriez jamais utiliser ce type de code dans un modèle. Vous devez créer des fonctionnalités dans votre classe de bloc pour gérer cela.la source
Une autre réponse:
Qu'est-ce que tu penses?
la source
L'extraction du statut enregistré à partir du modèle de session ne fonctionnera pas si vous souhaitez l'utiliser après avoir activé le cache FPC par défaut de Magento. Dans ce cas, vous devez utiliser SessionFactory à la place.
La session n'est pas lancée si la mise en cache FPC est activée, détails: https://github.com/magento/magento2/issues/3294#issuecomment-328464943.
Pour résoudre ce problème, vous devez utiliser
SessionFactory
, par exemple:la source
J'ai essayé de nombreuses manières trouvées sur Google mais aucune des solutions ne fonctionne. J'ai donc vérifié la fonctionnalité principale et créé un fichier php pour vérifier si un client est connecté ou non sans utiliser le gestionnaire d'objets.
Pour plus d'informations, voir ici http://blog.webtechnologycodes.com/customer-loggedin-check-magento2
la source