
Nous y voici enfin — le moment tant attendu (par moi en tout cas!) : l’arrivée de la librairie CodeIgniter OpenID.
Mise à jour : j’ai déjà découvert certains bogues — je vais les lister sur la page de test de CIOpenID.
Premièrement, il est important de mentionner que je n’ai pas beaucoup écrit de code dans cette librairie — car cette « librairie » est en fait une solution pour utiliser la librairie PHP OpenID facilement avec CodeIgniter. La majorité du travail a donc été effectuée par JanRain.
Deuxièmement, il faut savoir que CodeIgniter OpenID n’est pas une librairie qui ajoute un mécanisme d’identification d’utilisateurs via une base de données. La librairie vous permet seulement de déterminer si un utilisateur est bel et bien propriétaire d’un identifiant OpenID donné. Lorsque cela est déterminé, il n’en tient qu’à vous de déterminer comment vous aller poursuivre l’identification.
Troisièmement, cette version est une version alpha, ce qui signifie qu’il est possible que des bogues surviennent. Je ne l’ai pas testé sur plusieurs configurations de serveurs PHP.
Quatrièmement, cette version n’est pas destinée à être propagée (en tout cas, pour l’instant) à travers toute la communauté de CodeIgniter. Mon intention est de « tâter le pouls » de la communauté francophone (tant celle de CI ou d’OpenID) et ensuite de lancer la librairie officiellement.
Structure
Comme je l’ai mentionné dans mon billet précédent, la librairie est, en gros, constituée de 4 choses :
- Un fichier
ciopenid.phpdans le dossiercontrollersde votre application. Vous pourrez alors vous rendre surhttp://votreapplication.com/ciopenid/pour accéder à ce controller. - Un dossier
ciopeniddans le dossierlibrariesde votre application. Ce dossier contient les nonces ainsi qu’un fichierincludes.phpqui contient quelques fonctions. - Un dossier
openiddans le dossierlibrairiesde votre application. Il contient la librairie PHP OpenID de JanRain (version 2.0.0-rc2). Il est donc facile de mettre cette librairie à jour lorsqu’une nouvelle version est disponible. - Un fichier
ciopenid.phpsitué à la racine de votre site qu’il vous faudra exclure du processus de rewritting de CodeIgniter.
Par exemple, si vous avez le code suivant dans votre fichier .htaccess :
RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|system|public|images|robots\.txt)
RewriteRule ^(.*)\??(.*)?$ /index.php?$1 [L]
Il vous faudra le modifier par ceci :
RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|system|public|images|robots\.txt)
RewriteCond $1 !^(ciopenid\.php)
RewriteRule ^(.*)\??(.*)?$ /index.php?$1 [L]
Ce n’est pas une solution élégante, je l’avoue, mais c’est le seul moyen que j’ai trouvé pour pouvoir parser la variable $_GET de PHP — car elle est supprimée par le rewritting de CI.
Possibilité d’erreurs
À quelques endroits dans le code, vous trouverez des lignes comme celles-ci :
define('BASEPATH', dirname(__FILE__).'/system/');
define('APPPATH', BASEPATH.'application/');
include(APPPATH."libraries/ciopenid/includes.php");
Ce n’est pas une méthode très correcte pour inclure des fichiers, je vous le concède, mais bon, c’est tout ce que j’ai trouvé. Qu’est-ce que cela pose comme problème? Si vous avez modifié le nom de votre dossier system ou application, vous devrez modifier ces lignes en conséquence.
Autre problème potentiel : le « niveau de rapport d’erreur » sur votre serveur PHP. Je me suis aperçu que la librairie PHP OpenID produisait des erreurs de type Notice dans certains de ses fichiers. On doit donc remédier à la situation en élevant de le niveau de rapport d’erreur, en modifiant le fichier index.php à la racine du site de cette manière :
//error_reporting(E_ALL);
error_reporting(E_ALL ^ E_NOTICE);
Conclusion
Vous pouvez télécharger CodeIgniter OpenID 1.0a dès maintenant, pour l’appliquer à votre application CodeIgniter existante, ou tester CodeIgniter OpenID en ligne. Je vous suggère de télécharger la modification que Tommy Lacroix, un développeur montréalais, a fait : CodeIgniter 1.6.x module. Il utilise notamment les hooks de CodeIgniter, ce qui est beaucoup plus « clean » :)
Salut,
Beau travail !
J’ai testé assez rapidement et ça a l’air de très bien fonctionner, à part l’utillisation de l’extension SREG qui semblait renvoyer une erreur fatale (mais j’avoue ne pas avoir pousser les investigations…).
Cependant, quelques petites modifications sont nécessaires dans le cas où l’on n’utilise pas de fichier
.htaccess, pour tenir compte duindex.phpdans l’URL.Dans mes tentatives d’intégrer OpenID à CI, j’avais essayé de créer un plugin, mais cette façon de faire à l’air plus simple.
Une petite remarque quand même sur ta façon d’inclure les images dans tes vues, tu écris :
<?php echo site_url('/img/ciopenid.jpg'); ?>qui ne fonctionne pas si on ne supprime pas
index.phpde l’URL, alors que :<?php echo base_url().'img/ciopenid.jpg'; ?>fonctionne dans tous les cas (au cas où on ne peut pas utiliser de fichier
.htaccessnotamment).Merci bien en tout cas.
Tom (3 octobre 2007 à 5:48 EST)
Merci pour le feedback! J’étais trop enthousiaste à l’idée de launcher la librairie que je n’ai pas pris la peine de tester le tout avec une configuration de CI différente ;)
C’est pour ça le « a » de « 1.0a » !
Rémi Prévost (3 octobre 2007 à 8:29 EST)
J’ai fait un essai en transformant le fichier
ciopenid.phpde la racine en controller et en utilisant la technique décrite ici pour avoir accès à la variable$_GET.Et ma foi, il semblerait que cela fonctionne. Cela permet notamment d’avoir directement accès aux helpers de CI et de ne plus se casser la tête pour les chemins lors des inclusions (notamment pour les configurations « pas standard »).
Par contre, je n’ai aucune idée de l’impact d’une telle modification sur la sécurité et sur le fonctionnement de CI.
Tom (3 octobre 2007 à 9:56 EST)
En effet, cela a ses avantages. Sauf que comme tu le mentionnes, c’est au niveau de la sécurité que cela peut poser problème. Tant qu’il n’y aura pas de méthode officielle pour conserver
$_GET, je vais garder le concept du fichier PHP à la racine.Car toujours au niveau de la sécurité, personnellement j’aime mieux avoir à modifier (si nécessaire) manuellement les chemins pour les fichiers à inclure que de peut-être compromettre la sécurité de mon application.
Mais cela pourrait être une possibilité à envisager. Continue à me donner du feedback! :)
Rémi Prévost (3 octobre 2007 à 10:44 EST)
Hello!
Just a note to let you know that you have to disasble « Multiviews » option in Apache, or your code will not work. Multiviews makes « ciopenid » load « ciopenid.php ».
Thank you :)
Claudio Cicali (12 octobre 2007 à 5:11 EST)