Module client OAuht2

Note

Cette partie est accessible depuis les webtools, donc si vous avez créé votre projet avec l’option -a ou avec la commande create-project. Le module OAuth n’est pas installé par défaut. Il utilise la bibliothèque HybridAuth.

Installation

Depuis la racine du projet :

composer require phpmv/ubiquity-oauth

Note

Il est également possible d’ajouter la dépendance ubiquity-oauth en utilisant la partie Composer du module d’administration.

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

Configuration OAuth

Configuration globale

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

Cliquez sur le bouton Global configuration, et modifiez l’URL de rappel, qui correspond à l’url de rappel locale après une connexion réussie.

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

Contrôleur OAuth

Cliquez sur le bouton Create Oauth controller et attribuez à la route la valeur précédemment donnée au callback :

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

Valider et réinitialiser le cache du routeur :

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

Fournisseurs

Note

Pour une authentification OAuth, il est nécessaire de créer au préalable une application chez le fournisseur, et de prendre connaissance des clés de l’application (id et secret).

Cliquer sur le bouton Add provider et sélectionner Google:

../_images/provider-config.png

Vérifiez la connexion en cliquant sur le bouton Check :

../_images/google-check.png

Information post connexion :

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

Personnalisation de OAuthController

Le contrôleur créé est le suivant :

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
   }
}
  • La méthode _oauth correspond à l’url de callback

  • La méthode onConnect est déclenchée à la connexion et peut être surchargée.

Exemple :

  • Récupération possible d’un utilisateur associé dans la base de données

  • ou création d’un nouvel utilisateur

  • Ajout de l’utilisateur connecté et redirection

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:/');
     }