O redirecionamento intencional, ou “Intended Redirects” são uma funcionalidade vital do framework Laravel, especialmente quando você quer redirecionar usuários de volta para a página que estavam tentando acessar antes de serem interrompidos por algo como uma tela de login.

Este guia pretende ser uma referência abrangente, visto que a documentação oficial do Laravel não aborda esse tópico em detalhes.

O que são Intended Redirects no Laravel?

Intended Redirects são uma maneira de redirecionar o usuário de volta para a página que ele pretendia visitar antes de ser redirecionado, geralmente devido à autenticação. É comum em situações como tentar acessar um painel de controle sem estar logado.

Essa funcionalidade é comum para proteger páginas que podem ser acessadas apenas sob circunstâncias específicas, como após a subscrição e pagamento de uma taxa mensal, ou se a conta do usuário é de um determinado tipo ou plano.

Fundamentos de Redirecionamento no Laravel

Antes de nos aprofundarmos em Intended Redirects, é crucial entender o básico do redirecionamento no Laravel.

  • Redirecionamento Básico: Utiliza-se return redirect('route-name');
  • Redirecionamento para Rotas Nomeadas: return redirect()->route('route-name');

Introdução a Intended Redirects

O Laravel oferece uma forma específica de redirecionamento para situações onde é necessário verificar alguma condição antes de conceder acesso a uma página protegida: o redirecionamento intencional.

O que faz os Intended Redirects se destacarem é sua capacidade de lembrar a URL original que o usuário tentava acessar.

  • Uso Básico: return redirect()->intended('fallback-url');
  • Com Autenticação: É frequentemente usado no método authenticated() em um controlador de autenticação.
protected function authenticated(Request $request, $user)
{
    return redirect()->intended($this->redirectPath());
}

O método Redirect::intended() ou $redirect->intended() redirecionará o usuário para onde ele pretendia ir originalmente. Por exemplo, se você tentar acessar uma página privada e for redirecionado para o login, depois de fazer o login, você será redirecionado para a sua localização pretendida (a página que estava tentando acessar).

Você também pode adicionar uma URL de fallback ao método intended, como outra página no caso da página que o usuário estava tentando acessar não estar mais disponível.

Diferença entre Redirect::intended e Redirect::to

  • Redirect Intended: Redireciona o usuário para onde eles estavam indo originalmente.
  • Redirect To: Redireciona o usuário para a página que VOCÊ especifica para eles irem.

Definindo uma Intended URL

Antes de redirecionar o usuário para verificar sua conta, você pode definir uma intended URL com o código a seguir, que pode ser inserido em um middleware uqe testa se falta um pagamento do usuário ou sua autenticação:

app('redirect')->setIntendedUrl(route('protected.page'));
// ou
app('redirect')->setIntendedUrl('/url-to-protected-page');

Redirecionamento Após Verificação

Depois de verificar ou cobrar do usuário, você pode usar o código abaixo em vez de um redirecionamento regular:

return redirect()->intended();

Se por algum motivo os dados da sessão estiverem faltando, você pode passar uma URL de redirecionamento padrão como parâmetro:

return redirect()->intended('/default-page');

Customizando e Estendendo um Intended Redirect

Você pode estender a funcionalidade armazenando a URL pretendida manualmenteusando session()->put('url.intended', $url);.

Além do método setIntendedUrl, você também pode armazenar a URL intencionada manualmente usando session()->put('url.intended', $url);.

Casos de Uso Comuns

  • E-commerce: Redirecionar para a página do produto após o login
  • Painéis de controle: Acesso direto a subseções após autenticação

Dicas e Truques

  • Performance: Evite redirecionamentos desnecessários para melhorar a velocidade do site.
  • Segurança: Certifique-se de que apenas URLs confiáveis sejam redirecionadas para evitar ataques de phishing.

Exemplos de Código

Aqui estão alguns exemplos práticos:

// Customizando em um Middleware
public function handle($request, Closure $next)
{
    if ($request->user()) {
        session()->put('url.intended', '/dashboard');
    }

    return $next($request);
}

Conclusão

Neste guia, abordamos os fundamentos e as implementações avançadas de Intended Redirects no Laravel. Com essa compreensão, você está agora bem equipado para implementar essa funcionalidade crucial em seus projetos.

Referências

Seção de Perguntas e Respostas (FAQ)

  • Q: Posso usar Intended Redirects com rotas API?
    • R: Sim, mas pode requerer configurações adicionais para funcionar corretamente com autenticação baseada em token.