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.
Configuración de OAuth
Configuración global
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.
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:
Validar y restablecer la caché del router:
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:
Compruebe la conexión pulsando el botón Check:
Publicar información de inicio de sesión:
Personalización de OAuthController
El controlador creado es el siguiente:
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
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:/');
}