O código que você forneceu é um pouco diferente do meu magento. Talvez seja de versões diferentes. E eu não entendo por que isso está relacionado ao cookie. Finalmente resolvi substituindo a classe LoginPost. Eu postei minha resposta abaixo. Obrigado!
Paul
11
Minha versão do magento é a v2.0.8
Paul
Respostas:
28
Um plug-in é uma solução melhor nesse caso, porque sua classe estendida pode precisar ser atualizada quando o Magento 2 for atualizado.
Aqui está uma solução usando um pós-plugin no LoginPost-> execute () conforme sugerido por 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;}}
Isso funciona bem. Uma coisa é quando você precisa $ result-> setPath ('/'); ao seu caminho personalizado, não use "/" antes do URL, por exemplo. $ result-> setPath ('cliente / painel /');
Shuvankar Paul
Boa abordagem usando o plugin
Hafiz Arslan
Trabalho perfeito obrigado
HaFiz Umer
Seu único problema é que, se o cliente tentar fazer login e falhar, você ainda acessará a página inicial. Não há como capturar logons com falha.
21719 Andy
como posso passar o URL da página atual para este plugin?
Acho que usando um plugin com o afterExecute()seria uma opção mais limpa
Xenocide8998
2
Esta não é uma boa abordagem e só causará problemas no futuro. Plugin é o caminho a percorrer.
Phagento
podemos redirecionar do painel da conta para a página de histórico de pedidos de vendas por padrão?
jafar pinjar
0
Que o armazenamento local atual causou nosso problema.
Se habilitarmos ou desabilitarmos o Redirect Customer to Account Dashboard after Logging inCheck-out do convidado na configuração, esse recurso funcionará bem. No entanto, precisamos limpar o armazenamento local.
Podemos verificar o armazenamento local localStorage.getItem('mage-cache-storage').
Dê uma olhada:
fornecedor / magento / check-out do módulo / view / frontend / web / js / sidebar.js
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;}
O Magento definirá o cookie com $.cookie('login_redirect', this.options.url.checkout)base no customerDataarmazenamento local.
Do controlador vendor/magento/module-customer/Controller/Account/LoginPost.php. Ele verificará o URL de redirecionamento do cookie.
Resolvi isso passando o referenciador no controlador de módulo personalizado.
Etapa 1
`
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);}}`
Passo 2
Vá para Admin: Loja> Configuração> Clientes> Configuração do Cliente> Opções de Login> Redirecionar Painel do Cliente para a Conta após o login> Não
Respostas:
Um plug-in é uma solução melhor nesse caso, porque sua classe estendida pode precisar ser atualizada quando o Magento 2 for atualizado.
Aqui está uma solução usando um pós-plugin no LoginPost-> execute () conforme sugerido por Xenocide8998.
/Vendor/Module/etc/frontend/di.xml
:/Vendor/Module/Plugin/LoginPostPlugin.php
:fonte
Eu o resolvi substituindo a classe LoginPost
etc / di.xml
Fornecedor / Módulo / Controlador / Conta / LoginPost.php
fonte
afterExecute()
seria uma opção mais limpaQue o armazenamento local atual causou nosso problema.
Se habilitarmos ou desabilitarmos o
Redirect Customer to Account Dashboard after Logging in
Check-out do convidado na configuração, esse recurso funcionará bem. No entanto, precisamos limpar o armazenamento local.Podemos verificar o armazenamento local
localStorage.getItem('mage-cache-storage')
.Dê uma olhada:
fornecedor / magento / check-out do módulo / view / frontend / web / js / sidebar.js
O Magento definirá o cookie com
$.cookie('login_redirect', this.options.url.checkout)
base nocustomerData
armazenamento local.Do controlador
vendor/magento/module-customer/Controller/Account/LoginPost.php
. Ele verificará o URL de redirecionamento do cookie.Versão Magento:
-Magento versão 2.1.0
fonte
Resolvi isso passando o referenciador no controlador de módulo personalizado.
Etapa 1 `
Passo 2
Vá para Admin: Loja> Configuração> Clientes> Configuração do Cliente> Opções de Login> Redirecionar Painel do Cliente para a Conta após o login> Não
fonte