Le site des utilisateurs francophones de FluxBB.
Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Aprés avoir parcouru le forum de long en large depuis hier, j'ai vu que le sujet à déjà été abordé mais a toujours finni à l'eau 
Ma question est donc : Quel est le code le plus minimaliste possible sans vérifications à insérer dans une classe de login externe déjà existante afin que lors du traitement de la connection à la base de données du site une fois les vérifs effectuées, établir la connection au forum en parrallele.
// Ok tout s'est bien passé la connection au site est établie::
/**
LOGIN AU FORUM
*/
define('PUN_TURN_OFF_MAINT', 1);
define('PUN_QUIET_VISIT', 1);
define('PUN_ROOT', '/www/forum/');
require PUN_ROOT.'include/common.php';
// Load the login.php language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/login.php';
--> Quelle est la requête à insérer ici afin de connecter le membre au forum ? <--
////////////////////////////////////////////////////////////////////////////////
$message['message'] = "Welcome $username, you are now logged in!";
return json_encode($message);
}
1000mercis par avance !
Dernière modification par vince74 (18-06-2012 13:08:15)
Hors ligne
Bonsoir,
j'ai vu que le sujet à déjà été abordé mais a toujours fini à l'eau
Parce que la plupart du temps la demande n'était pas assez précise…
Et c'est encore le cas ! 
=> questions :
- quelles sont les tables user sur "le site" ?
- comportent-elles les MÊMES noms et les MÊMES password (encodés selon le MÊME schéma) ?
- quelles sont les variables (php) utilisables dans ce script ? (en particulier sur les infos user, connecté).
Bref, il est impossible de te répondre dans l'état…
(mais tu peux déjà commencer par regarder "login.php" pour te donner une idée des infos nécessaires).
Hors ligne
Bonjour, merci de ta réponse, je précise,
Au niveau des valeures à transmettre je comptais rajouter les champs de fluxbb, depuis mon formulaire de login existant : arretes moi tout de suite si c'est pas bon :
<input type="hidden" name="form_sent" value="1" />
<input type="hidden" name="req_username" value="username" />
<input type="hidden" name="req_password" value="password" />Et ensuite rajouter les requetes d'update du forum dans le traitement existant du login du site, j'espére avoir été suffisament précis, pour le cryptage du mot de passe c'est bon.
C'est le bout de code necessaire dans login.php de flux bb en fait que je n'arrive pas à isoler.
Dernière modification par vince74 (19-06-2012 06:36:51)
Hors ligne
Yop,
Les inputs de type hidden sont inutile pour le coup, en théorie tu n'as que la session pour fluxBB à créer.
Pour cela, en respectant les codes utilisés par fluxbb, tu as :
include/common.php
// Check/update/set cookie and fetch user info
$pun_user = array();
check_cookie($pun_user);Sachant que la fonction check_cookie() (présente dans include/function.php) est :
//
// Cookie stuff!
//
function check_cookie(&$pun_user)
{
global $db, $db_type, $pun_config, $cookie_name, $cookie_seed;
$now = time();
// If the cookie is set and it matches the correct pattern, then read the values from it
if (isset($_COOKIE[$cookie_name]) && preg_match('%^(\d+)\|([0-9a-fA-F]+)\|(\d+)\|([0-9a-fA-F]+)$%', $_COOKIE[$cookie_name], $matches))
{
$cookie = array(
'user_id' => intval($matches[1]),
'password_hash' => $matches[2],
'expiration_time' => intval($matches[3]),
'cookie_hash' => $matches[4],
);
}
// If it has a non-guest user, and hasn't expired
if (isset($cookie) && $cookie['user_id'] > 1 && $cookie['expiration_time'] > $now)
{
// If the cookie has been tampered with
if (forum_hmac($cookie['user_id'].'|'.$cookie['expiration_time'], $cookie_seed.'_cookie_hash') != $cookie['cookie_hash'])
{
$expire = $now + 31536000; // The cookie expires after a year
pun_setcookie(1, pun_hash(uniqid(rand(), true)), $expire);
set_default_user();
return;
}
// Check if there's a user with the user ID and password hash from the cookie
$result = $db->query('SELECT u.*, g.*, o.logged, o.idle FROM '.$db->prefix.'users AS u INNER JOIN '.$db->prefix.'groups AS g ON u.group_id=g.g_id LEFT JOIN '.$db->prefix.'online AS o ON o.user_id=u.id WHERE u.id='.intval($cookie['user_id'])) or error('Unable to fetch user information', __FILE__, __LINE__, $db->error());
$pun_user = $db->fetch_assoc($result);
// If user authorisation failed
if (!isset($pun_user['id']) || forum_hmac($pun_user['password'], $cookie_seed.'_password_hash') !== $cookie['password_hash'])
{
$expire = $now + 31536000; // The cookie expires after a year
pun_setcookie(1, pun_hash(uniqid(rand(), true)), $expire);
set_default_user();
return;
}
// Send a new, updated cookie with a new expiration timestamp
$expire = ($cookie['expiration_time'] > $now + $pun_config['o_timeout_visit']) ? $now + 1209600 : $now + $pun_config['o_timeout_visit'];
pun_setcookie($pun_user['id'], $pun_user['password'], $expire);
// Set a default language if the user selected language no longer exists
if (!file_exists(PUN_ROOT.'lang/'.$pun_user['language']))
$pun_user['language'] = $pun_config['o_default_lang'];
// Set a default style if the user selected style no longer exists
if (!file_exists(PUN_ROOT.'style/'.$pun_user['style'].'.css'))
$pun_user['style'] = $pun_config['o_default_style'];
if (!$pun_user['disp_topics'])
$pun_user['disp_topics'] = $pun_config['o_disp_topics_default'];
if (!$pun_user['disp_posts'])
$pun_user['disp_posts'] = $pun_config['o_disp_posts_default'];
// Define this if you want this visit to affect the online list and the users last visit data
if (!defined('PUN_QUIET_VISIT'))
{
// Update the online list
if (!$pun_user['logged'])
{
$pun_user['logged'] = $now;
// With MySQL/MySQLi, REPLACE INTO avoids a user having two rows in the online table
switch ($db_type)
{
case 'mysql':
case 'mysqli':
case 'mysql_innodb':
case 'mysqli_innodb':
case 'sqlite':
$db->query('REPLACE INTO '.$db->prefix.'online (user_id, ident, logged, color) VALUES('.$pun_user['id'].', \''.$db->escape($pun_user['username']).'\', '.$pun_user['logged'].', \''.$db->escape($pun_user['g_color']).'\')') or error('Unable to insert into online list', __FILE__, __LINE__, $db->error());
break;
default:
$db->query('INSERT INTO '.$db->prefix.'online (user_id, ident, logged, color) SELECT '.$pun_user['id'].', \''.$db->escape($pun_user['username']).'\', '.$pun_user['logged'].', \''.$db->escape($pun_user['g_color']).'\' WHERE NOT EXISTS (SELECT 1 FROM '.$db->prefix.'online WHERE user_id='.$pun_user['id'].')') or error('Unable to insert into online list', __FILE__, __LINE__, $db->error());
break;
}
// Reset tracked topics
set_tracked_topics(null);
}
else
{
// Special case: We've timed out, but no other user has browsed the forums since we timed out
if ($pun_user['logged'] < ($now-$pun_config['o_timeout_visit']))
{
$db->query('UPDATE '.$db->prefix.'users SET last_visit='.$pun_user['logged'].' WHERE id='.$pun_user['id']) or error('Unable to update user visit data', __FILE__, __LINE__, $db->error());
$pun_user['last_visit'] = $pun_user['logged'];
}
$idle_sql = ($pun_user['idle'] == '1') ? ', idle=0' : '';
$db->query('UPDATE '.$db->prefix.'online SET logged='.$now.$idle_sql.' WHERE user_id='.$pun_user['id']) or error('Unable to update online list', __FILE__, __LINE__, $db->error());
// Update tracked topics with the current expire time
if (isset($_COOKIE[$cookie_name.'_track']))
forum_setcookie($cookie_name.'_track', $_COOKIE[$cookie_name.'_track'], $now + $pun_config['o_timeout_visit']);
}
}
else
{
if (!$pun_user['logged'])
$pun_user['logged'] = $pun_user['last_visit'];
}
$pun_user['is_guest'] = false;
$pun_user['is_admmod'] = $pun_user['g_id'] == PUN_ADMIN || $pun_user['g_moderator'] == '1';
}
else
set_default_user();
}La fonction est longue et a besoin de beaucoup de variable/function.
Je te laisse chercher la dessus 
Hors ligne
Bonjour WinuX merci de ta réponse, je nage completement ! :s
Tout est utile dedans ou est ce possible "d'élaguer" ?
Hors ligne
Je doute qu'on puisse se passer de quoique ce soit à vrai dire.
Tout d'abord il te faut le fichier config.php qui contient des variables importantes au bon fonctionnement des cookies.
Ensuite, tu as besoin de la variable $db et $pun_config qui sont initialisé dans include/common.php, le premier contient la connexion à la base de donnée et permet d’exécuter les requête, la seconde contient toutes les informations de la table config.
Et enfin, il te faut toutes les fonctions utilisées dans celle ci :
- pun_setcookie()
- set_default_user()
Bien entendu, il faudra définir la variable globale PUN_ROOT (qui correspond à la racine de fluxbb).
Voilà pour les détails. Je pense que tu sauras réussir avec ça (je t'aide pas d'avantage car en plus de ne pas pouvoir, il faut en faire soit même l'expérience
). Bon courage
Hors ligne
Pages : 1