Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] [résolu] Module d'authentification "home made" basé sur jAuth

Posted by muirgen on 06/13/2012 09:43

Bonjour à vous,

Je suis actuellement en train de développer un module d'authentification, me basant sur l'existant "jAuth" fourni avec Jelix, mais je rencontre quelques problématique ! (Et j'ai un peu de mal au niveau compréhension du mécanisme il faut avouer aussi !!).

Pourquoi ne pas me servir de jAuth qui est fonctionnel dès son installation ? Tout simplement parce qu'il y a des spécificités particulières pour l'authentification des utilisateurs du site (un intranet pour être précise) et que sa m'ennuie de taper dans le module propriétaire de jelix (je pourrais en avoir besoin ultérieurement... on sait jamais) et puis il y a aussi la curiosité et le challenge de fabriquer tout le système !

J'ai compulsé la documentation, pour créer mon module qui s'appel : acces, ainsi que la création d'un plugin. Le module est donc créer dans mon appli (que nous appellerons "myapp"). Dans myapp, j'ai copié le fichier auth.coord.ini.php sur le chemin suivant : myapp/var/config/index. Puis je l'ais renommé "acces.coord.ini.php" et modifié pour qu'il se cale sur mon module "acces".

driver = "acces"
[acces]
...
Définition de paramètres pour le driver
...

J'ai ensuite déclaré le plugin dans le fichier config.ini.php, sur le chemin suivant : myapp/var/config/index

[coordplugin]
acces = "index/acces.coord.ini.php"

J'ai ajouté dans myapp/plugin/auth/acces/, un fichier :

  • acces.auth.php, dans lequel j'ai définit ma classe :
require(JELIX_LIB_PATH.'auth/jIAuthDriver.iface.php');

class accesAuthDriver implements jIAuthDriver{

...
Les fonctions relatives à jIAuthDriver
...
}

myapp/plugin/coord/acces, deux fichiers :

  • acces.coord.ini.php.dist (qui en fait est le même fichier que acces.coord.ini.php)
  • acces.coord.php, dans lequel j'ai définit ma classe :
require(JELIX_APP_PATH.'plugins/auth/acces/acces.auth.php');

class AccesCoordPlugin implements jICoordPlugin{

function __construct($conf){ ...le code... }

public function beforeAction ($params){ ...le code... }

public function beforeOutput(){ ...le code... }

public function afterProcess (){ ...le code... }

}

Là, logiquement tout est en place ! et effectivement si je met le code :

public $pluginParams = array(
      '*'=>array('acces.required'=>true)
    );

dans un controller, et que je test des retours via mes fichiers de gestion de l'authentification "acces", je peux faire afficher si la session existe ou non, etc ... les fichiers sont bien pris en compte.

Ce que je ne comprends pas par contre et ce même en reprenant des éléments du code de jAuth (auth.coord.php), c'est comment effectuer la redirection vers le module "acces" -> dans le controller "login". J'ai bien quelque chose de ce type dans le fichier auth.coord.php :

$selector= new jSelectorAct($this->config['on_error_action']);
...
return $selector;

Qui me semble gérer la redirection lors de son return dans le controller mais j'ai pas de déclenchement de la redirection justement ! (j'ai fait un var_dump($selector) et il me semble bien que j'ai tout ce qu'il faut pour une action de redirection).

object(jSelectorAct)[8]
  protected 'forUrl' => string 'acces~login:out' (length=15)
  protected 'type' => string 'act' (length=3)
  public 'request' => string 'classic' (length=7)
  public 'controller' => string 'default' (length=7)
  public 'method' => string 'index' (length=5)
  protected '_dirname' => string 'actions/' (length=8)
  public 'module' => string 'intranet' (length=8)
  public 'resource' => string 'default:index' (length=13)
  protected '_suffix' => string '' (length=0)
  protected '_cacheSuffix' => string '.php' (length=4)
  protected '_path' => string 'C:\wamp\www\myapp.dev\myapp/modules/myapp/controllers/default.classic.php' (length=85)
  protected '_cachePath' => null
  protected '_compiler' => null
  protected '_compilerPath' => null
  protected '_useMultiSourceCompiler' => boolean false

Bref je ne comprends pas du tout comment on gère cette satané redirection depuis le fichier de traitement acces.coord.php (ou auth.coord.php), ma compréhension va plus loin que le désire de faire fonctionner mon propre module / plugin, j'aimerai vraiment comprendre comment fonctionne jAuth.

voila, si quelqu'un peu m'aider pour que je puisse continuer à faire mon développement tout en ayant la satisfaction de voir mon user se faire envoyer paître sur le formulaire lorsqu'il n'est pas connecté ...

Merci d'avance !

  [Opened] Module d'authentification "home made" basé sur jAuth

Reply #1 Posted by foxmask on 06/13/2012 15:23

Bonjour,

L'intérêt de Jelix est d'éviter de réinventer la roue en... surchargeant ce qu'il fournit, pour qu'il colle à ses besoins et un intranet c'est dans ses cordes :)

Donc si des besoins particuliers se font sentir on surchargera la DAO de jAuth ainsi que les templates de gestion de compte/login

Enfin pour votre redirection c'est "con comme la lune" ;) ça se passe ici dans le plugin coord auth (ou access) :

;=========== Parameters for jauth module

; number of second to wait after a bad authentification
on_error_sleep = 3

; action to redirect after the login
after_login = "jcommunity~account:show"

; action to redirect after a logout
after_logout = "teg~default:index"

; says if after_login can be overloaded by a "auth_url_return" parameter in the url/form for the login
enable_after_login_override = on

; says if after_logout can be overloaded by a "auth_url_return" parameter in the url/form for the login
enable_after_logout_override = on

on change chacun de ces paramètres et - voilà


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Module d'authentification "home made" basé sur jAuth

Reply #2 Posted by foxmask on 06/13/2012 15:27

muirgen a dit :
j'aimerai vraiment comprendre comment fonctionne jAuth.

j'espère vous avoir apportée la "lumière" et vous faire faire justement machine arrière pour vous simplifier la vie parce que là vous mettez le doigt dans un engrenage ...


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Module d'authentification "home made" basé sur jAuth

Reply #3 Posted by laurentj on 06/13/2012 17:34

Bonjour

c'est comment effectuer la redirection vers le module "acces" -> dans le controller "login".

à partir d'où ? à quel moment ?

Le plugin auth.coord.php vérifie que l'utilisateur est authentifié AVANT l’exécution de n'importe quelle action. Si l'utilisateur n'est pas authentifié, et si le contrôleur cible nécessite une authentification (indiqué dans son $pluginParams), alors il renvoi une nouvelle action à executer (le return $selector).

Rappel : un plugin coord doit renvoyer le selecteur d'une nouvelle action si il désire que l'action demandée ne soit pas executée. sinon doit renvoyer null.

Maintenant, dans le cas de auth.coord.php et de la config par défaut, l'action à exécuter redirige elle même vers une autre action. Il faut faire alors attention que dans le contrôleur de cette autre action, le 'acces.required' pour cette action soit à false, pas à true.

  [Opened] Module d'authentification "home made" basé sur jAuth

Reply #4 Posted by muirgen on 06/21/2012 10:42

Bonjour,

Merci à Foxmask et Laurent pour leur réponse.

J'ai mis un peu de temps à répondre, vue que j'étais partie sur un autre aspect du projet.

Foxmask -> Je suis d'accord avec toi, sur le principe de ne pas réinventer la roue, par contre là où je ne suis pas tout à fait d'accord c'est sur la modification du jAuth de base, sans même comprendre ce que je fais ! Au niveau des redirections, j'avais bien saisie que l'on pouvait les spécifiers dans le fichier ini du plugin mais ce n'était pas l'objet de mon questionnement.

Laurent a plus vue là où je me retrouve bloqué !

Car effectivement, je voudrais qu'une redirection se fasse lorsque qu'un contrôle s'effectue :

  • pas de session ouverte -> formulaire
  • mauvais login et mot de passe -> système de blocage à mettre en place sur le principe de trois essaies donc : 1 - Check du nombre d'essaie déjà effectué en bdd (et blocage du compte si > 3) puis redirection vers formulaire.
  • etc ...

Visiblement j'avais vue juste en supposant que

$selector= new jSelectorAct($this->config['on_error_action']);
...
return $selector;

me permettait de le gérer dans la partie

public function beforeAction ($params){
...
}

de mon fichier plugin -> coord -> acces -> acces.coord.php

Nota : J'ai bien vérifier ce qu'a dit Laurent :

Maintenant, dans le cas de auth.coord.php et de la config par défaut, l'action à exécuter redirige elle même vers une autre action. Il faut faire alors attention que dans le contrôleur de cette autre action, le 'acces.required' pour cette action soit à false, pas à true.

Et tout est ok ! Par contre impossible de faire une redirection ... Je suis toujours coincée ! Quelques lumières supplémentaire m'aiderait beaucoup !

Merci d'avance ! Muirgen

  [Opened] Module d'authentification "home made" basé sur jAuth

Reply #5 Posted by foxmask on 06/21/2012 15:48

muirgen a dit :

Et tout est ok !
Par contre impossible de faire une redirection ... Je suis toujours coincée !
Quelques lumières supplémentaire m'aiderait beaucoup !

donc tout n'est pas ok :)

quelle tete à le plugin coord ?

ne manquerait-il pas un return $selector à la fin du beforeAction ?


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Module d'authentification "home made" basé sur jAuth

Reply #6 Posted by muirgen on 06/26/2012 15:35

Bonjour,

Oui effectivement, Foxmask, dans la pratique, on est bien d'accord que tout n'est pas ok :)

CE que je voulais dire c'est que sur le principe, tout est vérifier et donc, supposé fonctionner mais .. non.

J'ai refait quelques tests entre temps histoire de pas venir ennuyer la communeauté sur quelque chose que j'aurais pu oublier dans mon code, mais visiblement il y a quelque chose qui m'échappe toujours !

Je me base sur le dernier message de Foxmask et l'histoire du return de $selector.

J'ai fait, un peu rapidement il est vrai un p'tit check pour cette histoire de redirection si une condition n'est pas rempli dans le plugin :

public function beforeAction ($params){

$selector = null;
        
//je check dans un premier temps si la session existe. Si c'est pas le cas 
je la créé avec les élements vide à l'interieur.

if (!isset($_SESSION[$this->config['session_name']])){
$_SESSION[$this->config['session_name']] = array('login' => '', 'email' => '');
}

//Ensuite je test si la clé login dans le tableau 
de la session existe ou du moins est rempli. A ce stade là, si je fais un 
echo 'pouet' par exemple, je l'ai bien, donc la condition est bien vérifiée.
//C'est donc ici, que j'aimerai tester une première fois 
cette histoire de redirection avec le jSelectorAct et la variable $selector 
retournée en sorti de condition.    
    
if(!$_SESSION[$this->config['session_name']]->login){
        
$selector = new jSelectorAct('acces~login:form'); 
		
}

return $selector;
}

C'est vraiemnt du hyper basique, juste pour illustrer le cheminement que j'essaie de prendre, car déjà de base, si je n'arrive pas à faire un return du $selector qui est censé faire une redirection, déployer tout l'ensemble du code pour le plugin ne vas pas m'avancer à grand chose, puisque j'ai besoin des actions de retour ^^

Merci à vous d'avance pour l'aide !

Muirgen

  [Opened] Module d'authentification "home made" basé sur jAuth

Reply #7 Posted by laurentj on 06/26/2012 22:22

Bonjour,

je viens de tester ton code sur ma machine, ça fonctionne très bien. Donc soit tu n'as pas bien recopié ton code, soit tu as d'autres trucs mal foutu quelque part. cependant, il y a quand même un truc qui cloche dans ton code : dans la variable de session, tu stocke un array(), alors que dans le test suivant tu l'utilise comme un objet, ce n'est pas cohérent. Active la debug bar pour voir ces erreurs !

Cependant, même en corrigeant, chez moi ça fonctionne très bien.

N'oublie pas qu'avec tes tests, tu as dejà des choses en session. Donc si ça se trouve tu as vraiment quelque chose dans la propriété login. supprime le cookie de session dans ton navigateur et refais des tests.

  [Opened] Module d'authentification "home made" basé sur jAuth

Reply #8 Posted by muirgen on 07/03/2012 10:21

Bonjour,

Et bien mille mercis à vous deux pour vous être penchés sur mon cas :)

Le fait est que j'avais bien les bonnes ficelles entre les mains, mais j'avais fait un noeud en plein milieu et donc cela ne fonctionnait pas !

En fait, correction faite des erreurs que Laurent a remonté, je me suis apperçue que sans réponses complétement définies dans mon controleur d'arrivé de chaque redirection, il était logique que rien ne se passe.

J'ai donc fait des réponses bateaux rapidement pour voir et vérifier et ... Tout fonctionnait parfaitement. Donc en fait, j'avais un problème qui n'en était pas vraiement un. Cela dit, si vous ne m'aviez pas répondu je n'aurais jamais sue si j'étais bien parti ou non !

Donc encore une fois : mercis à vous !!

Je retourne terminer mon module d'authentification maison :)

Muirgen

 
Page
  1. Module d'authentification "home made" basé sur jAuth