La forma correcta de redirigir al usuario después del login en Drupal

Redirigir automáticamente a un usuario después de iniciar sesión en un proyecto Drupal es un requisito común.

En Drupal 7, probablemente habrías usado hook_user_login() para realizar esta tarea, pero con Drupal 8/9 hay una forma más robusta de manejar esto.

Hay varios módulos contribuidos que ofrecen esta funcionalidad, por ejemplo el módulo "Redirect after login". Sin embargo, en algunos proyectos complejos es necesario escribir código custom para controlar con precisión lo que se hace. 

Cualquiera que sea la razón, así es como se ha de redirigir a los usuarios en Drupal 8/9:

use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;

/**
 * Implements hook_form_FORM_ID_alter().
 */
function MY_CUSTOM_MODULE_form_user_login_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  $form['#submit'][] = 'MY_CUSTOM_MODULE_user_login_form_submit';
}

/**
 * Custom submit handler for the login form.
 */
function MY_CUSTOM_MODULE_user_login_form_submit($form, FormStateInterface $form_state) {
  $url = URL::fromUserInput('/custom/path');
  $form_state->setRedirectUrl($url);
}

Para Drupal 8/9 en particular, es importante tener en cuenta que ya no usamos  hook_user_login() , porque detendría la invocación de otras implementaciones de ese gancho. En cambio, estamos agregando un controlador de envío personalizado al formulario de inicio de sesión del usuario.

Por supuesto, esto es solo un punto de partida. Puede agregar ciertas condiciones o redirigir a los usuarios a diferentes urls según su rol u otros parámetros. 

¿Necesitas un experto en Drupal?

Desarrollador Drupal senior, freelance, especializado en lo más complejo: migraciones, sitios multilingüe, plataformas SaaS e integración con Stripe. Uso IA para reducir tiempos y costes de entrega, con revisión experta en cada línea de código.

Sin agencias, sin intermediarios. Contacto directo con quien hace el trabajo.