alexespinola/login-cuentas

Autenticacion Oauth2 contra el sistema de cuentas

1.0.0 2021-06-13 14:54 UTC

This package is auto-updated.

Last update: 2024-04-13 21:23:43 UTC


README

img

LoginCuentas

68747470733a2f2f696d672e736869656c64732e696f2f7374617469632f76313f6c6162656c3d706870266d6573736167653d372e3226636f6c6f723d677265656d 68747470733a2f2f696d672e736869656c64732e696f2f7374617469632f76313f6c6162656c3d4c61726176656c266d6573736167653d372e7826636f6c6f723d677265656d Latest Stable Version License

loginCuentas es una librería que le permite integrar la autenticación de Laravel al sistema de cuentas de Trenes Argentinos.

Esta librería genera todas las rutas, vistas, controladores, etc, necesarios para el proceso de autenticación, por lo tanto usted no debe usar el comando que provee Laravel php artisan make:auth.

Ademas de resolver el proceso de autenticación, esta librería provee:

  • Una interfaz gráfica para la gestión de usuarios
  • Dos middlewares, "CheckToken" y "RefreshToken"

Internamente usa el protocolo de autenticación Oauth2 mediante el package "league/oauth2-client"

Requerimientos

  • PHP: ^7.2
  • laravel: ^7
  • composer
  • En la DB de su aplicación debe existir la tabla users con los campos id , name y email (Laravel al incluye por defecto y se genera al ejecutar el comando php artisan migrate)

Instalación

composer require alexespinola/login-cuentas

Configuración

En el archivo .env de su aplicaión defina las credenciales de autenticación:

  • clientId=<clientId>
  • clientSecret=<clientId>
  • redirectUri=http://<path-to-your-proyect>/authorize

Opcionalmente puede definir tambien:

  • urlAuthorize=https://cuenta.sofse.gob.ar/oauth2/authorize/
  • urlAccessToken=https://cuenta.sofse.gob.ar/oauth2/token/
  • urlResourceOwnerDetails=https://cuenta.sofse.gob.ar/api/user/
  • urlApiCuentas=https://cuenta.sofse.gob.ar/api/
Archivo de configuración

Publique la config de esta librería con el siguiente comando:

php artisan vendor:publish --provider="loginCuentas\LoginCuentasServiceProvider" --tag="config"

Esto crea un archivo de configuración en su aplicación: config/loginCuentas.php En este archivo usted puede definir:

  • La URL a donde redirigir despues del login 'urlRedirectAfterLogin'.
  • La URL para mostrar la vista SHOW de usuarios urlShowUser.
  • La URL para mostrar la vista EDIT de usuarios urlEditUser.

La librería no implementa la funcianalidad para editar o ver detalle de un usuario. Usted debe crear un userController en su aplicación que haga estas tareas ademas de las vistas y rutas correspondientes.

Middlewares

Esta librería provee dos middlewares: RefreshToken: Para renovar el token de usuario automaticamente cuando este expire. CheckToken: Para autenticar mediante el header "Authorization" las peticiones a APIs que exponga su aplicaón.

Usted puede usar estos middlewares tanto en grupos de rutas como en el constructor de sus controladores.

En grupos de rutas;
Route::group(['middleware' => ['RefreshToken']], function() {
  Route::get('/home', function () {
    return view('home');
  });
  ...
});
En el constructor de los controladores;
public function __construct() {
    $this->middleware('CheckToken');
}
Evento UserWasLogged

Es probable que usted necesite realizar acciones cuando un usuario se loguea en su aplicacíon como por ejemplo:

  • Guardar los permisos del usuario en una variable de sesión
  • Registrar los accesos a la aplicación

Para esto la librería LoginCuentas emite un evento UserWasLogged para que usted pueda registrar un Listener en su aplicación que escuche dicho evento y realice las acciones que usted desee.

Instruciones para implementes el Listener

1- Cree el listener App\Listeners\afterUserLogged.php siguiendo el ejemplo que se muestra abajo y codifique las acciones que desee en el método handle. NOTE que la variable $event->userID contien el ID del usuario logueado.

<?php

namespace App\Listeners;

use loginCuentas\Events\UserWasLogged;
use App\User;
use Session;

class afterUserLogged
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct() {
      
    }

    /**
     * Handle the event.
     *
     * @param  \App\Events\UserWasLogged  $event
     * @return void
     */
    public function handle(UserWasLogged $event)
    {
        //COMO EJEMPLO: define una variable de sección con los datos del usuario
        $user = User::find($event->userID)->toJson();
        Session::put('user', $user);
    }
}

2- Registre el Event y el Listener en el archivo App\Providers\EventServiceProvider.php dentro del array protected $listen:

use loginCuentas\Events\UserWasLogged;
use App\Listeners\afterUserLogged;

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        UserWasLogged::class =>[
            afterUserLogged:: class,
        ]
    ];

    ...

NOTE que se importan el evento desde la librería loginCuentas y el listener que usted creó desde su aplicación.

Modificar vistas

Si usted quiere modificar las vistas que provee este paquete debe puplicarlas con el siguiente comando:

php artisan vendor:publish --provider="loginCuentas\LoginCuentasServiceProvider" --tag="views"

Esto crea una carpeta con todas las vistas en su aplicación en resources/views/vendor/loginCuentas

Las rutas y vista de usuarios

La libreria loginCuentas provee tres rutas para la gestión de usuarios

  • GET /users - Muestra el listado de usuarios (como se muestra en la imagen de abajo).
  • POST /users - Para la creación de usuarios.
  • GET /users-sync - Para sincronizar los usuarios de cuentas con su aplicación o viseversa.

img

NOTE que cada usuario tiene un "estado":

  • Sincronizado: Registrado en la DB de su aplicación y cuentas.sofse.gob.ar.
  • No existe en el sistema: Registrado en cuentas.sofse.gob.ar pero no es su aplicación.
  • No asociado a cuentas: Registrado en la DB de su aplicación pero no en cuentas.sofse.gob.ar.

NOTE que cuando el usuario no está "Sincronizado" se muestra un botón "Sync" que al presionarlo sincronizará la información del usuario en cuentas.sofse.gob.ar con la de la DB de su aplicación.

Es posible que usted quiera embeber la vista de usuarios en el template app.balde.php de su aplicación: Para hacerlo solo debe publicar las vistas y reemplazar el valor de la etiqueta @extends('loginCuentas::template') del archivo resources/views/vendor/loginCuentas/users/index.blade.php

  #@extends('loginCuentas::template')
  @extends('layouts.app')

Los botones "Ver" y "Editar" por defecto redirecionan a:

  • Ver: GET /users/{id}
  • Editar: GET /users/{id}/edit

Usted puede cambiar este comportamiento modificando en el archivo de configuración config/loginCuentas.php el valor de las siguientes variables:

  • La URL para mostrar la vista SHOW de usuarios urlShowUser.
  • La URL para mostrar la vista EDIT de usuarios urlEditUser.