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

  [Opened] Configurer jAuth avec une classe

Posted by Epychoc on 03/26/2013 08:57

Bonjour !

Je débute avec jAuth et essaye de comprendre le fonctionnement de ce module. J'ai décidé d'utiliser le driver Class (utilisateur statique, stocké dans un fichier, vu que je n'aurais qu'un unique utilisateur, je pense que c'est donc le meilleur driver à choisir).

j'ai donc crée une classe AuthDriver qui implémente jAuthDriver, et c'est à ce niveau que je coince. Je dois donc réecrire les méthodes de l'interface, et par exemple pour la méthode createUserObject ou getUser je ne sais pas vraiment quoi faire. Quelle sorte d'objet je dois créer ?

Voici ce que j'ai déjà codé pour l'instant :

<?php
class AuthDriver implements jAuthDriver
{
	protected $file;

	protected $user = 'admin';
	protected $password;

	public function __construct(array $params)
	{
		parent::__construct($params);

		$this->file = fopen('file.txt', 'a+');
		fseek($this->file, 0);
		$this->password = fgets($this->file);
	}

	public function __destruct()
	{
		parent::__destruct();
		fclose($this->file);
	}

	public function changePassword($login, $newPassword)
	{
		if($login == 'admin') {
			ftruncate($this->file, 0);
			fputs($this->file, $newPassword);
		}
	}

	public function 
}

Merci d'avance pour votre aide.

  [Opened] Configurer jAuth avec une classe

Reply #1 Posted by foxmask on 03/26/2013 09:23

Bonjour

la doc de l'api est ici

Cliquotter sur le package "jelix" puis auth et hop :)

getUser (line 61)

return user data corresponding to the given login

    return: user data container
    access: public

object the getUser (string $login)

    string $login: the login of the user	

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

  [Opened] Configurer jAuth avec une classe

Reply #2 Posted by Epychoc on 03/26/2013 09:24

J'ai justement lu cette page, mais qu'est-ce que "user data container" ?

  [Opened] Configurer jAuth avec une classe

Reply #3 Posted by foxmask on 03/26/2013 09:37

Ca veut dire que selon la driver utilisé, on retourne un type d'objet different.

Par exemple "classiquement" avec un driver DB on retourne un objet DAO Pour le driver "classe" on retourne ... une classe

C'est le "container" (le type de classe)

driver jauth 'class'


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

  [Opened] Configurer jAuth avec une classe

Reply #4 Posted by Epychoc on 03/26/2013 09:44

Mais concrètement je dois faire quoi ? J'arrive vraiment pas à comprendre la logique de tout ça.

Voici ou j'en suis (Qui me donne une erreur 500 quand je passe la page de connexion) :

Error 500. A technical error has occured. Sorry for this trouble.

<?php
class AuthDriver implements jAuthDriver
{
	protected $login = 'admin';
	protected $password = 'password';

	protected $user;

	public function __construct(array $params)
	{
		parent::__construct($params);
		$this->user = $this->createUserObject($this->login, $this->password);
	}

	public function changePassword($login, $newpassword)
	{
		if($this->user->login == $login)
			$this->user->password = sha1($newpassword);
	}

	public function createUserObject($login, $password)
	{
		return new jAuthUser2($login, $password);
	}

	public function getUser($login)
	{
		if($this->user->login == $login)
			return $this->user;
	}

	public function getUserList($pattern)
	{
		return array($this->user);
	}

	public function removeUser($login)
	{
	}

	public function saveNewUser(object $user)
	{

	}

	public function updateUser(object $user)
	{

	}

	public function verifyPassword($login, $password)
	{
		if($login == $this->login && $password == sha1($this->password))
			return true;
		return false;
	}
}

class jAuthUser2  extends jAuthUser
{
	public $password;

	public function __construct($login, $password)
	{
		$this->login = $login;
		$this->password = sha1($password);
	}
}

  [Opened] Configurer jAuth avec une classe

Reply #5 Posted by foxmask on 03/26/2013 10:19

le probleme c'est que votre "implements" me parait faux.

jAuthDriver est une classe pas une interface

soit on fait

class AuthDriver implements jIAuthDriverClass

soit

class AuthDriver extends jAuthDriver

du coup Il faudrait retourner jetter un oeil à http://docs.jelix.org/fr/manuel-1.5/authentification/drivers#class pour voir comment s'y prendre.


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

  [Opened] Configurer jAuth avec une classe

Reply #6 Posted by laurentj on 03/26/2013 16:08

Bonjour,

Je crois, comme Foxmask l'a montré, que tu melanges plusieurs choses.

Tu as deux solutions

  • soit implémenter un driver à partir de 0. Tu dois donc faire un plugin de type "auth". C'est une classe qui doit être déclarée comme suit
class MyAuthDriver extends jAuthDriverBase implements jIAuthDriver {

   // ici définir ou redéfinir les méthodes de l'interface jIAuthDriver

}

Dans la conf:

driver = "My"
...
[My]
; -- ici options pour ton driver
  • Soit, pour te simplifier la vie, tu utilises le driver "class", qui te mâche pas mal le boulot. Dans ce cas, dans la configuration de jAuth, tu indiques que tu utilises le driver/plugin "class", et tu indiques une classe ("maclasse" par ex) que tu définira dans le répertoire classes/ de ton module
driver = "Class"
...
[Class]
class = "monmodule~maclasse"
password_crypt_function = sha1

Et ta classe "maclasse" est un peu plus simple à implémenter qu'un driver complet, et doit implémenter l'interface jIAuthDriverClass

 
Page
  1. Configurer jAuth avec une classe