Módulo cliente OAuth2

Nota

Esta parte es accesible desde las webtools, por lo que si creaste tu proyecto con la opción -a o con el comando create-project. El módulo OAuth no está instalado por defecto. Utiliza la librería HybridAuth.

Instalación

En la raíz de tu proyecto:

composer require phpmv/ubiquity-oauth

Nota

También es posible añadir la dependencia ubiquity-oauth utilizando la parte Composer del módulo de administración.

../_images/composer-add-1.png

Configuración de OAuth

Configuración global

../_images/oauth-part-0.png

Haga clic en el botón Global configuration y modifique la URL de devolución de llamada, que corresponde a la url de devolución de llamada local tras una conexión correcta.

../_images/oauth-part-callback.png

Controlador OAuth

Haga clic en el botón Create Oauth controller y asigne a la ruta el valor dado previamente a la devolución de llamada:

../_images/create-oauth-controller.png

Validar y restablecer la caché del router:

../_images/create-oauth-controller-created.png

Proveedores

Nota

Para una autenticación OAuth, es necesario crear previamente una aplicación en el proveedor, y tomar nota de las claves de la aplicación (id y secret).

Haga clic en el botón Añadir proveedor y seleccione Google:

../_images/provider-config.png

Compruebe la conexión pulsando el botón Check:

../_images/google-check.png

Publicar información de inicio de sesión:

../_images/google-check-infos.png

Personalización de OAuthController

El controlador creado es el siguiente:

app/controllers/OAuthTest.php
namespace controllers;
use Hybridauth\Adapter\AdapterInterface;
/**
 * Controller OAuthTest
 */
class OAuthTest extends \Ubiquity\controllers\auth\AbstractOAuthController{

   public function index(){
   }

   /**
    * @get("oauth/{name}")
    */
   public function _oauth(string $name):void {
      parent::_oauth($name);
   }

   protected function onConnect(string $name,AdapterInterface $provider){
      //TODO
   }
}
  • El método _oauth corresponde a la url de devolución de llamada

  • El método onConnect se activa en la conexión y puede ser anulado.

Ejemplo :

  • Posible recuperación de un usuario asociado en la base de datos

  • o creación de un nuevo usuario

  • Adición del usuario conectado y redirección

app/controllers/OAuthTest.php
   protected function onConnect(string $name, AdapterInterface $provider) {
      $userProfile = $provider->getUserProfile();
      $key = md5($name . $userProfile->identifier);
      $user = DAO::getOne(User::class, 'oauth= ?', false, [
         $key
      ]);
      if (! isset($user)) {
         $user = new User();
         $user->setOauth($key);
         $user->setLogin($userProfile->displayName);
         DAO::save($user);
      }
      USession::set('activeUser', $user);
      \header('location:/');
     }