Код, который вы предоставили, немного отличается от моего magento. Возможно это из разных версий. И я не понимаю, почему это связано с cookie. Я наконец решил это, переопределив класс LoginPost. Я разместил свой ответ ниже. Спасибо!
Пол
1
Моя версия magento v2.0.8
Пол
Ответы:
28
Плагин является лучшим решением в этом случае, потому что ваш расширенный класс может потребоваться обновить при обновлении Magento 2.
Вот решение, использующее дополнительный плагин для LoginPost-> execute (), как предложено 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;}}
Это хорошо работает. Одно дело, когда вам нужно $ result-> setPath ('/'); например, не используйте «/» перед URL. $ result-> setPath ( 'клиент / панель /');
Шуванкар Павел
Хороший подход с использованием плагина
Хафиз Арслан
Идеальная работа, спасибо
HaFiz Umer
Ваша единственная проблема с этим - если клиент пытается войти в систему и терпит неудачу, тогда вы все равно попадете на домашнюю страницу. Нет никакого способа поймать неудачные логины.
Энди Джонс
как я могу передать текущую страницу URL этому плагину?
Я думаю, что использование плагина с afterExecute()более чистым вариантом
Xenocide8998
2
Это не очень хороший подход и будет вызывать проблемы только в будущем. Плагин это путь.
Фагенто
мы можем по умолчанию перенаправить со сводной панели аккаунта на страницу истории заказов?
Джафар Пинджар
0
Именно текущее локальное хранилище стало причиной нашей проблемы.
Если мы включим или отключим Redirect Customer to Account Dashboard after Logging inгостевую проверку в конфигурации, эта функция будет работать хорошо. Однако нам нужно очистить ваше локальное хранилище.
Мы можем проверить местное хранилище 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 установит cookie $.cookie('login_redirect', this.options.url.checkout)на основе customerDataлокального хранилища.
С контроллера vendor/magento/module-customer/Controller/Account/LoginPost.php. Он проверит URL перенаправления из куки.
Я решил это путем передачи referer в пользовательский модуль контроллера.
Step1
`
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);}}`
Шаг 2
Перейдите в Admin: Магазин> Конфигурация> Клиенты> Конфигурация клиента> Параметры входа в систему> Перенаправить клиента на панель учетной записи после входа в систему> Нет
Ответы:
Плагин является лучшим решением в этом случае, потому что ваш расширенный класс может потребоваться обновить при обновлении Magento 2.
Вот решение, использующее дополнительный плагин для LoginPost-> execute (), как предложено Xenocide8998.
/Vendor/Module/etc/frontend/di.xml
:/Vendor/Module/Plugin/LoginPostPlugin.php
:источник
Я решил это, переопределив класс LoginPost
и т.д. / di.xml
Производитель / модуль / контроллер / счет / LoginPost.php
источник
afterExecute()
более чистым вариантомИменно текущее локальное хранилище стало причиной нашей проблемы.
Если мы включим или отключим
Redirect Customer to Account Dashboard after Logging in
гостевую проверку в конфигурации, эта функция будет работать хорошо. Однако нам нужно очистить ваше локальное хранилище.Мы можем проверить местное хранилище
localStorage.getItem('mage-cache-storage')
.Взглянуть:
продавец / Magento / модуль-контроль / просмотр / интерфейс / веб / JS / sidebar.js
Magento установит cookie
$.cookie('login_redirect', this.options.url.checkout)
на основеcustomerData
локального хранилища.С контроллера
vendor/magento/module-customer/Controller/Account/LoginPost.php
. Он проверит URL перенаправления из куки.Версия Magento:
-Magento версия 2.1.0
источник
Я решил это путем передачи referer в пользовательский модуль контроллера.
Step1 `
Шаг 2
Перейдите в Admin: Магазин> Конфигурация> Клиенты> Конфигурация клиента> Параметры входа в систему> Перенаправить клиента на панель учетной записи после входа в систему> Нет
источник