salvador-diaz / salvador-diaz-lamp

Web portfolio con stack LAMP
0 stars 0 forks source link

Autenticación y autorización con Google o GitHub #3

Closed salvador-diaz closed 3 months ago

salvador-diaz commented 3 months ago

Contexto

Actualmente no se discrimina el acceso a recursos según el usuario que accede a la página.

Requisitos

salvador-diaz commented 3 months ago

La autenticación y autorización son realizados mediante el servicio OAuth2.0 que ofrece Google. Se procede a desarrollar la integración con la app

Pasos previos

Registrar mi aplicación web en Google API Console:

  1. Configurar pantalla de consentimiento OAuth.
    • Definir nombre y dominio del sitio.
    • Definir los permisos que pedirá el sitio.
  2. Crear cedencial de cliente OAuth.
    • Nombre interno de la app.
    • URI/s de redirección.

Entonces Google Console provee un client ID y un client secret los cuales identifican a la aplicación. Serán guardados en las variables de entorno como:

const GOOGLE_OAUTH_CLIENTID = "";
const GOOGLE_OAUTH_SECRET = "";

Dependencias

Se ve necesario instalar el gestor de dependencias composer para requerir las siguientes librerías mantenidas por Google:

Flujo OAuth2.0

salvador-diaz commented 3 months ago

De las librerías se destacan las clases:

Se implementan en la nueva carpeta src/services/GoogleAuthController.php.

carpeta services
Funciones que representan reglas de negocio o lógica específica de la aplicación. Suelen interactuar con una dependencia externa (ej: API externa)

carpeta utils
Funciones de ayuda reutilizables y genéricas.

salvador-diaz commented 3 months ago

La sesión del usuario autenticado persiste temporalmente a través de la variable global $_SESSION.

Se guardan los usuarios autenticados en la tabla user para llevar un control de los mismos.

CREATE TABLE user (
    id int PRIMARY KEY AUTO_INCREMENT,
    firstname varchar(255) NOT NULL,
    lastname varchar(255) NOT NULL,
    email varchar(255) NOT NULL,
    img_url varchar(255) NOT NULL,
    verified_email int NOT NULL,
    google_id varchar(255) NOT NULL,
    created_at datetime DEFAULT CURRENT_TIMESTAMP -- fecha-hora actual por defecto
);