- 1
[Opened] jAuth, drivers multiples dans une même application ?
Posted by fg on 06/30/2007 15:57
Bonjour,
J'utilise jAuth dans une application avec ma propre DAO, ça fonctionne nikel.
Mais j'aurais besoin, toujours dans la même application, d'utiliser un autre driver d'authentification.
Donc la question est : Est-il possible de spécifier dans un contrôleur le driver utilisé par le plugin jAuth ?
Merci d'avance,
PS: sinon Jelix c'est génial à utiliser :)
[Opened] Re: jAuth, drivers multiples dans une même application ?
Posted by laurentj on 06/30/2007 18:41
Non, ce n'est pas possible directement, je n'ai pas prévu ça dans jAuth... Mais il y a une autre solution.
Une solution serait d'avoir un point d'entrée autre que index.php, qui utiliserait un fichier de configuration différent de celui de index.php. Et dans ce fichier de conf, tu indiquerais, pour le plugin auth, un fichier de configuration différent dans lequel tu aurais un driver différent :-) (tu suis ? :-) )
Et ce point d'entrée serait utilisé uniquement pour le module/controleur/action en question qui utilise ton autre driver auth.
Par exemple, tu crée un index2.php (trouve un nom plus parlant en relation avec le sujet de l'action/module). Dans ce index2.php, tu indique 'index2/config.ini.php' comme fichier de configuration. Tu crée donc tonappli/var/config/index2/config.ini.php. Tu crée aussi tonappli/var/config/index2/auth.plugin.ini.php, et dans le index2/config.ini.php, tu l'indiques au niveau du plugin
[plugins] auth = index2/auth.plugin.ini.php
Et dans ce fichier auth.plugin.ini.php, tu indiques ta nouvelle conf, différente du fichier index/auth.plugin.ini.php que tu as normalement indiqué pour ton index.php
N'oublie pas de bien configurer alors le moteur d'url que tu utilise, pour spécifier à quel module/action ton nouveau point d'entrée se refère, de manière a ce que quand tu indique à jUrl ou autre, un selecteur de l'action en question, il te génère la bonne url :-)
Par exemple, dans le var/config/defaultconfig.ini.php, si c'est le moteur d'url simple (par défaut) que tu utilises, tu rajoutes, dans la section simple_urlengine_entrypoints :
index2 = "ton_module_specifique~tonControlleurSpecifique_taMethodSpecifique@classic"
Tu peux ajouter plusieurs actions comme ça séparé par une virgule. Ou si cela concerne tout ton module spécifique, tu peux simplement mettre ceci :
index2 = "ton_module_specifique~*@classic"
Si tu veux en savoir plus ou si tu utilises le moteur d'url significant, je te laisse lire la doc.
Je te recommande de ne pas utiliser pour un même module tes deux type d'authentification, ce sera plus simple à configurer et à utiliser. Donc pour ton authentification spéciale, je te recommande d'avoir un module spécifique. Cela permet aussi de "sécuriser" (ne pas pouvoir executer des modules avec index2.php et index.php en même temps). au debut de la config de index2/config.ini.php, tu peux ainsi mettre ce genre de chose :
checkTrustedModules = on ; list of modules : module,module,module trustedModules = modulespecifique
(rappel, dans ton index/config.ini.php ou index2/config.ini.php, tu peux indiquer des nouvelles valeurs pour les paramètres qui sont dans le defaultconfig.ini.php )
[Opened] Re: jAuth, drivers multiples dans une même application ?
Posted by fg on 07/03/2007 10:41
Ça marche presque :)
J'ai bien un plugin jAuth pour mes 2 modules différents, mais quand j'accède à mon module avec le point d'entrée "index2" dans ton exemple, jUrl m'affiche les URL avec le point d'entrée "index" dans mes templates et mes zones.
Pourtant dans le defaultconfig.ini.php, j'ai bien mis
index2 = "monmodule~*@classic"
et quelque soit la valeur de checkTrustedModules...
Y a-t il un moyen de spécifier à jUrl le point d'entrée en plus du couple "module~controleur_action" ?
D'autres par j'ai du mal à saisir à quoi correspondent les paramètres "checkTrustedModules" et "trustedModules" dans les fichiers de conf ?
[Opened] Re: jAuth, drivers multiples dans une même application ?
Posted by laurentj on 07/03/2007 12:16
"checkTrustedModules" et "trustedModules" servent à "sécuriser" l'application. Dans la mesure où tu peux indiquer plusieurs dépôts de module dans l'option modulesPath, il peut y avoir des modules qui ne sont pas utilisés par l'application, ou non désirables. Pour éviter donc que l'on tente d'accéder à ces modules, on peut activer la vérification du nom du module demandée avec checkTrustedModules, et donner la liste des modules accessibles avec trustedModules.
Et dans le cas où on a plusieurs points d'entrées, il est recommandé d'activer cette vérification et de lister les modules propres à chaque point d'entrée dans le trustedModules des configurations respectives des points d'entrée (cependant, je me rend compte que cela fait un peu double emploi avec la configuration que l'on fait au niveau du mapping des urls)
Pour ton problème, je vais voir si il n'y a pas un bug, mais ça me parait étrange parce que ça fonctionne d'après les tests unitaires.
Y a-t il un moyen de spécifier à jUrl le point d'entrée en plus du couple "module~controleur_action" ?
Non, sinon le mapping n'aurait plus d'intérêt. On peut juste indiquer en plus pour quel type de requête cela concerne (en rajoutant @classic, @jsonrpc etc..). Mais ton problème n'a pas de rapport avec ça.
[Opened] Re: jAuth, drivers multiples dans une même application ?
Posted by fg on 07/03/2007 22:30
En fait ça fonctionne, j'utilisais le moteur d'url significatif, je suis repassé en simple et ça marche. Faudrait que je revois mon urls.xml...
Par contre, il y a un autre problème :
1 - J'utilise le point d'entrée index, je m'authentifie sur le module protégé. J'y accède correctement, tout va bien.
2 - Sans me déconnecter ni fermer le navigateur, je vais sur mon deuxième point d'entrée et je vais sur le module protégé par le second jAuth, et là j'y accède sans passer par l'authentification.
En fait, il suffit qu'une personne s'authentifie sur un des 2 modules, pour accéder au 2 modules, alors que le but c'est d'utiliser une dao différente.
La paramètre "trustedModules" contient uniquement les modules accéssibles en fonctionne des points d'entrées.
hum faudrait que j'ailler jeter un oeil au code de jAuth..
[Opened] Re: jAuth, drivers multiples dans une même application ?
Posted by laurentj on 07/04/2007 09:47
ah oui j'ai pas pensé à ça. Les informations du user sont stockées en session une fois qu'il est authentifié. Donc ce qui se passe c'est que les deux points d'entrées partage la même session, donc quand on s'authentifie dans l'un, on l'est dans l'autre...
Une session est identifié via un cookie. Donc une solution serait d'avoir deux cookies de session différents. Pour cela, la seule manière de les différencier sur un même site, c'est qu'ils soient affectés à deux répertoires différents. Donc :
- mettre les deux points d'entrées dans un sous répertoire différent par rapport au document root (/foo/index.php et /bar/index2.php mais pas /index.php et /bar/index2.php, je ne suis pas sur en effet que ça fonctionne vraiment comme ça)
- dans leur config respective, bien spécifier la valeur du basePath (/foo/ pour l'un, /bar/ pour l'autre)
- et mettre l'option au debut de la config : shared_session=off.
Une autre solution : utiliser deux sous-domaines différents.
Ou encore : modifier le plugin de coordination auth et la classe jAuth pour qu'on puisse spécifier, dans le plugin, le nom de la variable de session qui contiendra les infos du user, et dans la classe jAuth, qui utilise ce nom pour stocker les infos.
- 1