Bonjour,
J'ai installé une nouvelle galerie pour laquelle je souhaiterai utiliser une table des utilisateurs externe a celle de piwigo.
J'ai donc créé mon fichier de config local avec les valeurs suivantes :
// apache_authentication : utiliser l'authentification HTTP d'Apache comme // référence au lieu de la table des utilisateurs ? $conf['apache_authentication'] = false; // users_table : quelle table est la table de référence pour les // utilisateurs ? Peut être une table externe à Piwigo. // // Si vous décidez d'utiliser une table externe, vous devez préparer votre // base de données en supprimant certains données : // // delete from piwigo_user_access; // delete from piwigo_user_cache; // delete from piwigo_user_feed; // delete from piwigo_user_group; // delete from piwigo_user_infos; // delete from piwigo_sessions; // delete from piwigo_rate; // update piwigo_images set average_rate = NULL; // delete from piwigo_caddie; // delete from piwigo_favorites; // // Toutes les informations contenues dans ces tables sont relatives au // contenu de la table des utilisateurs. $conf['users_table'] = 'users'; // D'autres tables peuvent être changées si vous définissez une constante associée. // Example: // define('USER_INFOS_TABLE', 'pwg_main'.'user_infos'); // external_authentification : si vous passez par une identification // externe il faut changer la valeur pour True $conf['external_authentification'] = true; // D'autres tables peuvent être changées si vous définissez la constante // correspondante. // Example: // define('USER_INFOS_TABLE', 'pwg_main'.'user_infos'); // user_fields : Le mapping peux se faire sur des champs génériques dans la // table spécifique. // Par exemple dans Piwigo, le champs "mail adress" est nommé "mail_adress" // or dans punbb ce champs est appelé "email". $conf['user_fields'] = array( 'id' => 'id', 'username' => 'login', 'password' => 'hashed_password', 'email' => 'mail' ); // pass_convert : fonction pour chiffrer ou hasher le mot de passe afin de // le stocker en base de donnée. $conf['pass_convert'] = create_function('$s', 'return sha1($s);'); // guest_id : identifiant de l'invité $conf['guest_id'] = 2; // default_user_id : id de l'utilisateur servant de modèle aux nouveaux // membres (lors // de la création de comptes). $conf['default_user_id'] = $conf['guest_id']; // browser_language : La processus d'enregistrement et de gestion des // membres guest/generic prend // par défaut la localisation (langue) du navigateur. Si celui-ci n'est pas // définissable (disponible), // Piwigo prendra par défaut PHPWG_DEFAULT_LANGUAGE $conf['browser_language'] = true; // webmaster_id : identifiant du webmaster $conf['webmaster_id'] = 1; // Est-ce que l'accès visiteur est accepté? (Ce n'est pas une garantie de // sécurité, vos catégories doivent être "privée" également) // false : l'accès à la galerie des simples visiteurs redirigera vers // la page identification.php $conf['guest_access'] = true; ?>
J'ai vidé les quelques tables de la base de données avant de me reconnecter.
Le problème est que j'ai maintenant beaucoup d'erreur sql/php qui s'affiche sur la page avec un gros message "Statut de l'utilisateur guest non conforme, utilisation du statut par défaut."
J'ai essayé de faire machine arrière, c'est à dire de supprimer mon fichier de configuration locale mais ça ne change rien.
Je précise que j'ai déjà effectué cette manip sur une autre gallerie qui était en 2.1 et que j'ai upgradé par la suite en 2.2 sans aucun problème particuliers.
La gallerie est visible sur http://piwigo.mandogo.fr
Merci d'avance
Dernière modification par judedie (2011-05-18 12:18:21)
Hors ligne
Je précise que lorsque je m'authentifie, je suis redirigé vers une page blanche avec beaucoup d'erreurs :
Warning: [mysql error 1064] Erreur de syntaxe pr�s de '' � la ligne 4
SELECT DISTINCT(id)
FROM piwigo_images INNER JOIN piwigo_image_category ON id=image_id
WHERE category_id NOT IN (0)
AND level> in/piwigo/include/dblayer/functions_mysql.inc.php on line 654
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /var/www/mandogo.fr/piwigo/include/dblayer/functions_mysql.inc.php on line 200 Notice: Undefined index: level in /var/www/mandogo.fr/piwigo/include/functions_user.inc.php on line 690
Warning: [mysql error 1064] Erreur de syntaxe pr�s de 'GROUP BY c.id, c.global_rank' � la ligne 8
SELECT c.id AS cat_id, global_rank,
MAX(date_available) AS date_last, COUNT(date_available) AS nb_images
FROM piwigo_categories as c
LEFT JOIN piwigo_image_category AS ic ON ic.category_id = c.id
LEFT JOIN piwigo_images AS i
ON ic.image_id = i.id
AND i.level<=
Et en bas de la page :
You are not authorized to access the requested page
Identification Home
Hors ligne
je pense qu'il manque la partie du code qui indique la correspondance entre les différentes table
// user_fields : mapping between generic field names and table specific
// field names. For example, in PWG, the mail address is names
// "mail_address" and in punbb, it's called "email".
$conf['user_fields'] = array(
'id' => 'id',
'username' => 'username',
'password' => 'password',
'email' => 'mail_address'
);
---------
de plus il faut prévoir dans ta table utilisateur un user qui servira d'invité
(tu peux définir sons ID avec
$conf['guest_id'] = 2;
Hors ligne
ddtddt a écrit:
je pense qu'il manque la partie du code qui indique la correspondance entre les différentes table
// user_fields : mapping between generic field names and table specific
// field names. For example, in PWG, the mail address is names
// "mail_address" and in punbb, it's called "email".
$conf['user_fields'] = array(
'id' => 'id',
'username' => 'username',
'password' => 'password',
'email' => 'mail_address'
);
---------
de plus il faut prévoir dans ta table utilisateur un user qui servira d'invité
(tu peux définir sons ID avec
$conf['guest_id'] = 2;
Cette partie est déjà présente dans mon fichier (scroll sur le code ;) )
Hors ligne
juste pour être certain : où avez vous placé et comment avez vous nommé votre fichier de config locale ?
Hors ligne
Le fichier s'appelle config.inc.php et est placé dans local/config
Je ne sais pas si je l'ai déjà mis, mais même lorsque je supprime mon fichier, l'erreur reste présente, pas moyen de revenir a une situation normale.
Hors ligne
c'est bien le bon endroit
Si vous supprimer/renommer config.inc, et purger les template dans maintenance, vous avez encore des erruers ?
Aussi est-ce que dans votre authentification externe vous avez un utilisateur appelé guest ?
Hors ligne
Le probleme c'est que je ne peux plus me connecter, donc je ne peux pas purger les templates.
Par contre j'ai accès au serveur, donc je peux les purger manuellement si tu me dit ou les trouver.
Je n'ai pas d'utilisateur appelé guest dans mon autre table, j'ai juste donné l'identifiant d'un utilisateur par défaut.
Edit:
C'est bon, en purgeant les templates dans _data/templates_c et en renommant mon fichier de config j'arrive à me reconnecter sans soucis.
Dernière modification par judedie (2011-05-18 14:41:56)
Hors ligne
encodage des mots de passe est bien en MD5 dans l'autre programme ?
Hors ligne
Bonjour,
J'ai un peu avancé sur le sujet.
Je me suis rendu compte d'une erreur que j'avais fait, j'avais mal comprit l'utilisation de la variable "external_authentication".
Je l'ai donc repassé à false et cela fonctionne correctement.
$conf['external_authentification'] = false;
J'ai un autre probleme maintenant, c'est que ma table `users_info` ne se remplit pas.
Du coup l'authentification ne fonctionne pas.
Par contre lorsque je remplit manuellement la table avec l'id qui correspond à mon utilisateur cela fonctionne sans probleme.
Est-ce que par hasard j'aurai touché un truc qu'il ne faudrait pas?
Dernière modification par judedie (2011-05-19 15:06:24)
Hors ligne
En me plongeant un peu plus dans le code je remarque quelques bizarreries dans le fichiers functions_users.php, plus précisemment dans la fonction getuserdata (ligne 266):
A priori cette partie pose problème :
// retrieve additional user data ? if ($conf['external_authentification']) { $query = ' SELECT COUNT(1) AS counter, FROM '.USER_INFOS_TABLE.' AS ui LEFT JOIN '.USER_CACHE_TABLE.' AS uc ON ui.user_id = uc.user_id LEFT JOIN '.THEMES_TABLE.' AS t ON t.id = ui.theme WHERE ui.user_id = '.$user_id.' GROUP BY ui.user_id ;'; if (pwg_db_fetch_row(pwg_query($query))!=1) { create_user_infos($user_id); $result = pwg_query($user_info_query); $user_infos_row = pwg_db_fetch_assoc($result); } }
Il semlberai que la , après "AS counter" ne soit syntaxiquement correcte.
De même la requête est stockée dans la variable $query et la fonction pwg_query utilise une variable $user_info_query
De même, si on utilise une authentification externe, on écrase le résultat de la requete ligne 297 :
$query = ' 297 SELECT 298 ui.*, 299 uc.*, 300 t.name AS theme_name 301 FROM '.USER_INFOS_TABLE.' AS ui 302 LEFT JOIN '.USER_CACHE_TABLE.' AS uc ON ui.user_id = uc.user_id 303 LEFT JOIN '.THEMES_TABLE.' AS t ON t.id = ui.theme 304 WHERE ui.user_id = '.$user_id.' 305 ;'; 306 307 $result = pwg_query($query); 308 $user_infos_row = pwg_db_fetch_assoc($result); 309
puisque le résultat est stocké dans la même variable.
A priori, au vu des messages d'erreur cela semble poser problème aussi
Hors ligne
Bonjour à tous,
Est-ce que quelqu'un d'autre à utilisé la fonctionnalité d'authentification externe avec succès?
Est il possible d'enregistrer un bug sur le sujet ou est-ce que cela viendrait de mon installation?
Merci
Hors ligne
oui
il fonctionne avec des forums et avec d'autre script
Mais cette partie est à améliorer
Toutes tes réflexions sur le sujet son les bienvenus
Par contre il n'y a pas de dev sur le coup pour le moment.
Hors ligne