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.
Configuration OAuth
Configuration globale
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.
Contrôleur OAuth
Cliquez sur le bouton Create Oauth controller et attribuez à la route la valeur précédemment donnée au callback :
Valider et réinitialiser le cache du routeur :
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:
Vérifiez la connexion en cliquant sur le bouton Check :
Information post connexion :
Personnalisation de OAuthController
Le contrôleur créé est le suivant :
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
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:/');
}