Trabajando con usuarios en Drupal 8 (y 9)
Sin lugar a duda, una de las operaciones más comunes en nuestros desarrollos web bajo Drupal, es la gestión de usuarios.
En numerosas ocasiones deberemos generar cuentas de usuario, realizar comprobaciones de roles, permisos... e incluso verificar que los datos de acceso son correctos.
A lo largo de este artículo intentaré mostrarte algunas de las operaciones más comunes. Empezemos...
Crear una cuenta de usuario
El proceso de creación de una cuenta de usuario en Drupal es muy similar a la creación de cualquier tipo de contenido:
<?php
use Drupal\user\Entity\User;
/* Obtengo el idioma actual */
$language = \Drupal::languageManager()->getCurrentLanguage()->getId();
/* Genero el nuevo usuario */
$user = User::create();
/* Añado los campos obligatorios */
$user->setPassword('password');
$user->setEmail('email@ejemplo.com');
$user->setUsername('user_name');
/* Podemos asignar el siguiente valor a FALSE si queremos editar
* un usuario existente */
$user->enforceIsNew();
/* Añado los campos opcionales */
$user->set("init", 'email@ejemplo.com');
$user->set("langcode", $language);
$user->set("preferred_langcode", $language);
$user->set("preferred_admin_langcode", $language);
/* Añado el/los roles */
$user->addRole('administrator');
/* Añado otros campos */
$user->set('nombre_campo', 'valor');
/* Guardo los cambios */
$res = $user->save();
Verificar usuario y contraseña
En el caso de tener un formulario personalizado para la realización del login; Drupal nos proporciona una función muy útil para verificar que los datos de usuario y contraseña son los correctos:
<?php
/* Obtenemos el uid del usuario si los datos son correctos */
$uid = \Drupal::service('user.auth')->authenticate('testusername', 'testpassword');
/* Comprobamos que realmente ha encontrado al usuario */
if ($uid) {
/* Realizamos los operaciones deseadas */
}
Realizar login
Con la función anterior podemos comprobar si el usuario indicado puede loguearse pero para poder hacer el login se necesita lo siguiente:
<?php
use Drupal\user\Entity\User;
$user = User::load($uid_usuario_para_login);
/* Realizo el login */
user_login_finalize($user);
Una vez realizado el login, lo suyo sería hacer la redirección a la página que queramos mostrar como "inicial" al usuario logueado.
Esta operación de redirección dependerá, en gran medida, de la ubicación del código anterior (no es lo mismo que sea un controlador, el submit de un formulario u otra función).
En un artículo posterior os indicaré las diferentes redirecciones que se pueden usar en Drupal.
INFO: El contenido del artículo se adhiere a nuestros principios de ética editorial. Para notificar un error visita nuestro formulario de contacto.