Pasar al contenido principal

código

Simple OAuth

  • URL de Video remoto
El módulo rest nos permitirá acceder e interactuar con el contenido de Drupal usando el formato json

Si no ves el video, puedes refrescar el navegador, presionando (Ctrl+Shift+R | Ctrl+F5 o Shift+F5), o abrirlo directamente desde el Canal de Youtube... HAZ CLIC AQUI

      Con el crecimiento en la popularidad en utilizar Drupal Desacoplado (Headless), combinando un diseño frontend desarrollado en javascript, a partir de frameworks como Angular, React.js o Vue.js, y a su vez, dejando las tareas relacionadas con gestión de usuarios, permisos y otras, relacionadas con bases de datos a cargo de Drupal; hoy aprenderemos a configurar uno de los módulos necesarios para proteger, este tipo de conexiones, entre Drupal 9 y otras aplicaciones. Nos referimos al módulo Simple Aouth, que nos permitirá configurar accesos y permisos restrictivos, para el intercambio de datos desde y hacia Drupal, de manera protegida.

Cómo instalar y configurar el módulo:

Paso 1 - Descargar el módulo:

     Lo primero que tendrás que hacer es descargarlo, para ello, a partir de Drupal 8 se recomienda que utilices el gestor de paquetes Composer, ya que te facilitará tanto la instalación como futuras actualizaciones del tus proyectos. No obstante también podrías descargarlo desde la Página oficial del módulo y una vez descargado, tendrás que colocarlo en la carpeta "modules" o "modules/contrib", dependiendo de tu instalación.

Paso 2 - Configuración:

     Primero genere un par de claves para que el módulo Simple OAuth las use al cifrar tokens. Estos deben almacenarse fuera de su directorio raíz de Drupal. Recomendamos la siguiente estructura de directorios:

.
├── LICENSE
├── README.md
├── composer.json
├── composer.lock
├── config
├── keys
├── scripts
├── vendor
└── web // > Drupal root directory

Genere las claves necesarias con el siguiente conjunto de comandos:

mkdir keys
cd keys
openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout > public.key
chmod 600 public.key
chmod 600 private.key

     Luego dígale al módulo Simple OAuth dónde encontrarlos. En su sitio de Drupal, en el menú administrativo Administrar, vaya a Configuración > OAuth simple y complete el formulario con las rutas a las claves que acaba de generar.

     Para ello, accederemos a la página de configuración del módulo en la url "/admin/config/people/simple_oauth" y a continuación rellenaremos los campos del formulario con los siguientes detalles:

Access token expiration time: 300
Refresh token expiration time 1209600
Public Key: ../keys/public.key
Private Key: ../keys/private.key

 

     A continuación, configure un nuevo cliente OAuth. Primero agregue un nuevo rol de Drupal. Vaya a Personas > Roles (/admin/people/roles/add) y agregue un nuevo rol llamado "Cliente Gatsby".

     Luego, crearemos un usuario y le asignaremos el rol que hemos creado cuando lo agregemos como consumidor en simple OAuth

     Luego, en el menú Administrar administración, vaya a Configuración > Simple OAuth > Clientes y haga clic en el botón Agregar consumidor. Complete el formulario y recuerde el valor que ingresa para el campo Nuevo secreto, ya que lo necesitará nuevamente más adelante. En Ámbitos, elija el rol de cliente de Gatsby que acabamos de crear. Finalmente, haga clic en Guardar para agregar el nuevo consumidor.

     En la página resultante, debería ver su nueva lista de consumidores junto con un UUID. Tome nota de este UUID. Combinados con el secreto de arriba, serán su ID de consumidor y clave, que se usarán para las solicitudes de OAuth más adelante

     Finalmente, otorgue permiso a los usuarios autenticados para otorgar códigos OAuth 2. En el menú Gestionar administración, vaya a Personas > Permisos (/admin/people/permissions). Marque la casilla "Grant OAuth2 codes" para otorgar al usuario autenticado los códigos de permisos OAuth 2. Luego, desplácese hasta la parte inferior de la página y haga clic en Guardar permisos.

Cómo crear un servicio personalizado en Drupal 9

  • URL de Video remoto
Aprende a servir datos desde Drupal mediante servicios web en formato json

Si no ves el video, puedes refrescar el navegador, presionando (Ctrl+Shift+R | Ctrl+F5 o Shift+F5), o abrirlo directamente desde el Canal de Youtube... HAZ CLIC AQUI

      ¿Qué es un Servicio?

          Nuestras aplicaciones están llenas de objetos útiles. Un ejemplo de ello es el objeto "Mailer", cuya implementación está relacionada con la gestión de mensajería y correos electrónicos, o por ejemplo, otros objetos, que nos ayudarán con toda clase de operaciones, relacionadas con tablas y bases de datos.  En resumen, casi todo lo que podemos ejecutar dentro de nuestras aplicaciones, se hace posible a través del uso o implementación de estos objetos.        

          En Symfony, a estos objetos se les conoce como Servicios, y cada servicio, a su vez, habita dentro de un objeto especial llamado Service Container, o contenedor de servicios.

         Debido a que, a partir de la versión 8, el núcleo de Drupal está basado en Symfony, podremos acceder y utilizar estos servicios, además de la posibilidad de crearlos a medida, para implementarlos dentro de nuestros proyectos.

         El proceso de creación e implementación de un servicio en Drupal 9, es relativamente simple. Se trata de crear nuestra clase, dentro del módulo personalizado y a continuación, declararla como servicio para poder reutilizarla en cualquier parte del proyecto, mediante el método conocido como Injección de dependencias. Pero antes de ir más allá, vamos a concentrarnos en conocer los fundamentos relacionados con la creación e implementación de un servicio personalizado en Drupal 9.

     Cómo crear un servicio personalizado en Drupal 9  

          Paso 1 - Creación de módulo personalizado:

               Cómo hemos mencionado antes, lo primero que debemos hacer antes de la creación del servicio, es crear nuestro propio módulo personalizado; si todavía no sabes cómo hacerlo, te invito a que pares un momento, antes de continuar,  y eches un vistazo al artículo Cómo crear un módulo en Drupal 9, donde te explico paso a paso y con un video, cómo hacerlo.

 

name: Saludo Service
description: 'Create A service Example'
package: drupaladicto

type: module
core_version_requirement: ^8.8.0 || ^9.0

          Paso 2 - Creación de nuestro servicio personalizado:

              Ahora que ya tenemos nuestro módulo personalizado, vamos a proceder con la creación del servicio. Para este ejemplo, crearemos un servicio al que llamaremos , SaludoService.php y que nos devolverá, mediante el método getSaludo(), y de forma aleatoria, varias frases que solemos utilizar para saludar.

              Si quieres más información relacionada con la estructura de los servicios y otros datos relacionados, puedes visitar la Página Oficial de Drupal

              La clase deberá estar ubicada dentro de la carpeta src, tal y como te muestro en la siguiente imagen:

 

A continuación, copia y pega el código dentro de nuestra clase:              

<?php

namespace Drupal\saludo_service;

/**
 * @file
 * Service Example
 */

class SaludoService {

  private $saludo;

  /**
   * Passing parameter to construct method
   */
  public function __construct(){

    $this->saludo = ['Hola','¿Qué tal estás?', 'Buenos Días!!'];

  }

  /**
   * @return string
   */
  public function getSaludo(){

    return $this->saludo[array_rand($this->saludo)];
  }

}

     Paso 3 - Declaración del servicio:

          Como comentábamos al principio de este artículo, los servicios se alojan dentro de un contenedor llamado Service Container, desde donde podrán ser llamados para utilizarlos dentro de cualquier lugar de la web mediante la Injección de Dependencias, para que nuestro servicio personalizado pueda cumplir con esta característica y por lo tanto, se incluido en este contenedor de servicios, tendremos que declararlo como tal, creando el archivo ".service.yml"., al mismo nivel que está nuestro ".info.yml"

 

          Dentro de este nuevo archivo, tendremos la estructura que te muestro a continuación, en la cual simplemente estamos declarando el servicio y a continuación, añadimos la ubicación de nuestro servicio. Recuerda respetar los espacios del formato "yml" o no funcionará. Además evita el uso de la tecla TAB para los espacios, en su lugar utiliza la barra espaciadora del teclado.

services:
  saludo_service.saludando:
    class: Drupal\saludo_service\SaludoService

     Paso 4 - Testeo del servicio utilizando un controlador:

          Aunque en versiones anteriores a Drupal 9, podíamos comprobar la ejecución de código PHP, directamente utilizando la interfaz de usuario, a la que se añadía esta opción cuando activábamos el modulo Devel, ésta fue eliminada del mismo, por motivos de seguridad. 

          Por esta razón, para poder comprobar nuestro servicio, en lugar de utilizar PHP Unit, utilizaremos un controlador, que nos permitirá crear una página test, donde podremos ver y comprobar el funcionamiento de nuestro servicio, una vez hayamos instalado y activado nuestro módulo personalizado.

          Para imprimir el contenido del servicio, crearemos una variable a la que asignaremos el método "getSaludo(); ", que hemos definido dentro de nuestro servicio y luego imprimiremos su valor utilizando la función ksm() del modulo Devel.

          Si todavía no sabes cómo crear un controlador en Drupal 9, te invito a que pares un momento antes de continuar y eches un vistazo a este artículo donde explico, con un video y su documentación paso a paso Cómo crear módulos con su Controlador y Plantilla en Drupal 9

          El siguiente código es el que deberá tener nuestra clase controlador SaludoServiceController.php para generar la página y posteriormente llamar al servicio e imprimir los resultados de prueba.

<?php

/**
 * @file
 * Implement hook_controller()
 */

namespace Drupal\saludo_service\Controller;

use Drupal\Core\Controller\ControllerBase;


class SaludoServiceController extends ControllerBase {


  public function content(){


    $miservicio = \Drupal::service('saludo_service.saludando');
    $misaludo = $miservicio->getSaludo();

    ksm($misaludo);

    return [
      '#markup' => $this->t('Hello @misaludo', ['@misaludo' => $misaludo ]),
    ];

  }
}

          Además, te dejo el código del archivo saludo_service.routing.yml, donde he definido la dirección a nuestro controlador y su método content para acceder a la página test.

saludo_service.saludopage:
  path: '/test-page'
  defaults:
    _controller: '\Drupal\saludo_service\Controller\SaludoServiceController::content'
  requirements:
    _permission: 'access content'

 

          Cuando hayas comprobado que no te falta ningún archivo, podrás activar el módulo y acceder a la url definida en el path del routing.yml "/testpage" y deberías ver el mismo resultado que te muestro a continuación.

 

Webservices | Introducción y básicos

En esta sección puedes encontrar todos videos relacionados con los servicios web, para drupal 8 y superiores. Iré ampliando la lista a medida que vaya encontrando otros temas interesantes para desarrollar.

Curso Gratuito