Le code que vous avez fourni est un peu différent de mon magento. Peut-être à partir de différentes versions. Et je ne comprends pas pourquoi il est lié aux cookies. Je l'ai finalement résolu en remplaçant la classe LoginPost. J'ai posté ma réponse ci-dessous. Merci!
Paul
1
Ma version de Magento est la v2.0.8
Paul
Réponses:
28
Un plugin est une meilleure solution dans ce cas, car votre classe étendue peut avoir besoin d'être mise à jour lors de la mise à jour de Magento 2.
Voici une solution utilisant un plugin après sur LoginPost-> execute () comme suggéré par Xenocide8998.
<?php
/**
*
*/namespaceVendor\Module\Plugin;/**
*
*/classLoginPostPlugin{/**
* Change redirect after login to home instead of dashboard.
*
* @param \Magento\Customer\Controller\Account\LoginPost $subject
* @param \Magento\Framework\Controller\Result\Redirect $result
*/publicfunction afterExecute(
\Magento\Customer\Controller\Account\LoginPost $subject,
$result){
$result->setPath('/');// Change this to what you wantreturn $result;}}
Ça marche bien. Une chose est quand vous devez $ result-> setPath ('/'); à votre chemin personnalisé, n'utilisez pas "/" avant l'URL, par exemple. $ result-> setPath ('client / tableau de bord /');
Shuvankar Paul
Bonne approche avec plugin
Hafiz Arslan
Perfect Work merci
HaFiz Umer
Votre seul problème avec cela est que si le client essaie de se connecter et échoue, vous allez toujours accéder à la page d'accueil. Il n'y a aucun moyen d'attraper les connexions qui ont échoué.
andy jones
comment puis-je transmettre l'URL de la page actuelle à ce plugin?
Je pense que l'utilisation d'un plugin avec le afterExecute()serait une option plus propre
Xenocide8998
2
Ce n'est pas une bonne approche et ne causera que des problèmes à l'avenir. Le plugin est la voie à suivre.
phagento
pouvons-nous rediriger le tableau de bord du compte vers la page d'historique des commandes par défaut?
jafar pinjar
0
Que le stockage local actuel a provoqué notre problème.
Si nous activons ou désactivons Redirect Customer to Account Dashboard after Logging inet Guest Checkout dans la configuration, cette fonctionnalité fonctionnera bien. Cependant, nous devons effacer votre stockage local.
Nous pouvons vérifier le stockage local localStorage.getItem('mage-cache-storage').
var cart = customerData.get('cart'),
customer = customerData.get('customer');if(!customer().firstname && cart().isGuestCheckoutAllowed ===false){// set URL for redirect on successful login/registration. It's postprocessed on backend.
$.cookie('login_redirect',this.options.url.checkout);if(this.options.url.isRedirectRequired){
location.href =this.options.url.loginUrl;}else{
authenticationPopup.showModal();}returnfalse;}
Magento définira le cookie en $.cookie('login_redirect', this.options.url.checkout)fonction customerDatadu stockage local.
Depuis le contrôleur vendor/magento/module-customer/Controller/Account/LoginPost.php. Il vérifiera l'URL de redirection du cookie.
J'ai résolu ceci en passant le référent dans le contrôleur de module personnalisé.
Étape1
`
useMagento\Framework\App\Action\Context;useMagento\Framework\View\Result\PageFactory;useMagento\Customer\Model\Session;useMagento\Framework\UrlInterface;classApproveextends \Magento\Framework\App\Action\Action {/**
* @var \Magento\Framework\View\Result\Page
*/protected $resultPageFactory;/**
* $param \Magento\Framework\App\Action\Context $context *//**
* @param CustomerSession
*/protected $_customerSession;protected $_urlInterface;publicfunction __construct(Context $context,PageFactory $resultPageFactory,Session $customerSession,UrlInterface $urlInterface
){
$this->resultPageFactory = $resultPageFactory;
$this->_customerSession = $customerSession;
$this->_urlInterface = $urlInterface;
parent::__construct($context);}publicfunction execute(){
$url = $this->_urlInterface->getUrl('*/*/*',['_current'=>true,'_use_rewrite'=>true]);// here pass custom url or you can either use current url on which you are currently and want to come back after logged in.
$loginUrl = $this->_urlInterface->getUrl('customer/account/login', array('referer'=> base64_encode($url)));if($this->_customerSession->isLoggedIn()){return $this->resultPageFactory->create();}
$this->_redirect($loginUrl);}}`
Étape 2
Accédez à Admin: Store> Configuration> Clients> Configuration du client> Options de connexion> Rediriger le client vers le tableau de bord du compte après la connexion> Non
Réponses:
Un plugin est une meilleure solution dans ce cas, car votre classe étendue peut avoir besoin d'être mise à jour lors de la mise à jour de Magento 2.
Voici une solution utilisant un plugin après sur LoginPost-> execute () comme suggéré par Xenocide8998.
/Vendor/Module/etc/frontend/di.xml
:/Vendor/Module/Plugin/LoginPostPlugin.php
:la source
Je l'ai résolu en remplaçant la classe LoginPost
etc / di.xml
Fournisseur / Module / Contrôleur / Compte / LoginPost.php
la source
afterExecute()
serait une option plus propreQue le stockage local actuel a provoqué notre problème.
Si nous activons ou désactivons
Redirect Customer to Account Dashboard after Logging in
et Guest Checkout dans la configuration, cette fonctionnalité fonctionnera bien. Cependant, nous devons effacer votre stockage local.Nous pouvons vérifier le stockage local
localStorage.getItem('mage-cache-storage')
.Regarde:
fournisseur / magento / module-checkout / view / frontend / web / js / sidebar.js
Magento définira le cookie en
$.cookie('login_redirect', this.options.url.checkout)
fonctioncustomerData
du stockage local.Depuis le contrôleur
vendor/magento/module-customer/Controller/Account/LoginPost.php
. Il vérifiera l'URL de redirection du cookie.Version de Magento:
-Magento version 2.1.0
la source
J'ai résolu ceci en passant le référent dans le contrôleur de module personnalisé.
Étape1 `
Étape 2
Accédez à Admin: Store> Configuration> Clients> Configuration du client> Options de connexion> Rediriger le client vers le tableau de bord du compte après la connexion> Non
la source