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.