El código que proporcionó es un poco diferente de mi magento. Quizás sea de diferentes versiones. Y no entiendo por qué está relacionado con las cookies. Finalmente lo resolví anulando la clase LoginPost. Publiqué mi respuesta a continuación. ¡Gracias!
Paul
1
Mi versión de magento es v2.0.8
Paul
Respuestas:
28
Un complemento es una mejor solución en este caso porque su clase extendida podría necesitar actualizarse cuando Magento 2 se actualice.
Aquí hay una solución que utiliza un complemento posterior en LoginPost-> execute () como lo sugiere 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;}}
Funciona bien. Una cosa es cuando necesita $ result-> setPath ('/'); a su ruta personalizada no use "/" antes de URL, por ejemplo. $ result-> setPath ('customer / dashboard /');
Shuvankar Paul
Buen enfoque utilizando el complemento
Hafiz Arslan
Trabajo perfecto gracias
HaFiz Umer
Su único problema con esto es que si el cliente intenta iniciar sesión y falla, aún así accederá a la página de inicio. No hay ninguna forma de detectar inicios de sesión fallidos.
andy jones
¿Cómo puedo pasar la URL de la página actual a este complemento?
Creo que usar un complemento con afterExecute()sería una opción más limpia
Xenocide8998
2
Este no es un buen enfoque y solo causará problemas en el futuro. El complemento es el camino a seguir.
phagento
¿podemos redirigir desde el panel de la cuenta a la página del historial de pedidos de ventas de forma predeterminada?
jafar pinjar
0
Que el almacenamiento local actual causó nuestro problema.
Si habilitamos o deshabilitamos Redirect Customer to Account Dashboard after Logging iny Guest Checkout en Configuración, esta característica funcionará bien. Sin embargo, necesitamos borrar su almacenamiento local.
Podemos verificar el almacenamiento 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 configurará la cookie en $.cookie('login_redirect', this.options.url.checkout)función customerDatadel almacenamiento local.
Del controlador vendor/magento/module-customer/Controller/Account/LoginPost.php. Verificará la URL de redireccionamiento desde la cookie.
Resolví esto pasando el árbitro en el controlador de módulo personalizado.
Paso1
`
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);}}`
Paso 2
Vaya a Admin: Tienda> Configuración> Clientes> Configuración del cliente> Opciones de inicio de sesión> Redirigir al cliente al panel de la cuenta después de iniciar sesión> No
Respuestas:
Un complemento es una mejor solución en este caso porque su clase extendida podría necesitar actualizarse cuando Magento 2 se actualice.
Aquí hay una solución que utiliza un complemento posterior en LoginPost-> execute () como lo sugiere Xenocide8998.
/Vendor/Module/etc/frontend/di.xml
:/Vendor/Module/Plugin/LoginPostPlugin.php
:fuente
Lo resolví anulando la clase LoginPost
etc / di.xml
Proveedor / Módulo / Controlador / Cuenta / LoginPost.php
fuente
afterExecute()
sería una opción más limpiaQue el almacenamiento local actual causó nuestro problema.
Si habilitamos o deshabilitamos
Redirect Customer to Account Dashboard after Logging in
y Guest Checkout en Configuración, esta característica funcionará bien. Sin embargo, necesitamos borrar su almacenamiento local.Podemos verificar el almacenamiento local
localStorage.getItem('mage-cache-storage')
.Echar un vistazo:
vendor / magento / module-checkout / view / frontend / web / js / sidebar.js
Magento configurará la cookie en
$.cookie('login_redirect', this.options.url.checkout)
funcióncustomerData
del almacenamiento local.Del controlador
vendor/magento/module-customer/Controller/Account/LoginPost.php
. Verificará la URL de redireccionamiento desde la cookie.Versión de Magento:
-Magento versión 2.1.0
fuente
Resolví esto pasando el árbitro en el controlador de módulo personalizado.
Paso1 `
Paso 2
Vaya a Admin: Tienda> Configuración> Clientes> Configuración del cliente> Opciones de inicio de sesión> Redirigir al cliente al panel de la cuenta después de iniciar sesión> No
fuente