Cursos Magento

Redirecionar para pagina específica depois do login no Magento 2

,

Publicado em 26 de setembro de 2021

Por padrão, o Magento sempre redireciona o cliente para a mesma página após realizar login em nossa loja.

Você pode forçar para que ele seja sempre redirecionado para o dashboard. Para isso basta alterar as configurações do Magento.

Animação com redirect personalizado depois do login no Magento 2

Durante o desenvolvimento do novo Magenteiro, surgiu a necessidade de poder redirecionar o cliente para páginas diferentes. Isto é, gostaríamos de informar para qual página ele deveria ser redirecionado após o login.

Uma das formas que encontramos de fazer isso é usando Plugins. No exemplo abaixo, demonstramos como isso é possível.

Após criar um módulo base, criamos um Plugin para Magento\Customer\Controller\Account\Login a fim de capturar o parâmetro ?redirectUrl. Desta forma, tal parâmetro pode ser passado na URL de login a fim de redirecionar o cliente para uma página específica.

Ex: https://www.magenteiro.com/customer/account/login?redirectUrl=https://www.magenteiro.com/curso/magento/aula/123

ℹ️ Plugins são formas de se interceptar métodos existentes, e alterar seu comportamento de várias formas. Este assunto é amplamente abordado no Magento 2: O Curso (seção 9 – Plugins).

use Magento\Customer\Model\Session;
use Magento\Framework\App\Request\Http;

class CustomerLoginPlugin
{
    private Session $session;
    private Http $httpRequest;

    public function __construct(Session $session, Http $httpRequest)
    {
        $this->session = $session;
        $this->httpRequest = $httpRequest;
    }

    /**
     * @param \Magento\Customer\Controller\Account\Login $subject
     * @param                                            $result
     */
    public function afterExecute(\Magento\Customer\Controller\Account\Login $subject, $result)
    {
        if ($redirectUrl = $this->httpRequest->getParam('redirectUrl', false)) {
            $this->session->setRedirectUrl($redirectUrl);
        }
        
        return $result;
    }
}

Depois criamos um plugin para Magento\Customer\Controller\Account\LoginPost. Este método é o que recebe as informações enviadas pelo formulário de Login.

No caso, estamos adicionando um novo comportamento após (after) a chamada do método. Desta forma, podemos alterar sua resposta caso notemos que existe uma URL salva na sessão (Plugin anterior).

use Magento\Customer\Controller\Account\LoginPost;
use Magento\Customer\Model\Session;

class CustomerLoginPostPlugin
{
    private Session $session;

    public function __construct(Session $session)
    {
        $this->session = $session;
    }

    /**
     * @param \Magento\Customer\Controller\Account\LoginPost $subject
     * @param                                                $result
     */
    public function afterExecute(\Magento\Customer\Controller\Account\LoginPost $subject, $result)
    {
        if ($result instanceof \Magento\Framework\Controller\Result\Redirect && $this->session->getRedirectUrl()) {
            $result->setPath($this->session->getRedirectUrl());
        }
        
        return $result;
    }
}

Módulo pronto

Caso deseje, você pode fazer download do módulo acima aqui mesmo.

Para instalar, basta descompactar o conteúdo da pasta app/code/Magenteiro/CustomUrlAfterLogin na mesma pasta em sua instalação Magento.

Lembre-se de rodar um bin/magento setup:upgrade depois disso.

Muito mais que isso

No curso de Magento 2, mostramos muito mais que isso. Além do conteúdo exclusivo você também conta com uma comunidade com mais de 400 desenvolvedores e alunos dos cursos de Magento 2 aqui do Magenteiro. É uma comunidade pronta para ajudar e aprender juntos sobre os mais diversos assuntos.

Venha fazer parte da nossa família.

Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-2/redirecionar-pagina-especifica-depois-login/"]