FluxBB.fr

Le site des utilisateurs francophones de FluxBB.

Vous n'êtes pas identifié(e).

#1 18-06-2012 13:07:26

vince74
Membre
Inscription : 18-06-2012
Messages : 3

Identification

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 smile

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

#2 19-06-2012 04:30:19

Mpok
Néo Admin
Inscription : 10-08-2006
Messages : 2 950
Site Web

Re : Identification

Bonsoir,

vince74 a écrit :

j'ai vu que le sujet à déjà été abordé mais a toujours fini à l'eau smile

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

#3 19-06-2012 06:35:41

vince74
Membre
Inscription : 18-06-2012
Messages : 3

Re : Identification

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

#4 19-06-2012 13:54:55

WinuX
Membre
Inscription : 18-07-2010
Messages : 390

Re : Identification

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 tongue

Hors ligne

#5 20-06-2012 15:40:05

vince74
Membre
Inscription : 18-06-2012
Messages : 3

Re : Identification

Bonjour WinuX merci de ta réponse, je nage completement ! :s
Tout est utile dedans ou est ce possible "d'élaguer" ?

Hors ligne

#6 20-06-2012 21:23:22

WinuX
Membre
Inscription : 18-07-2010
Messages : 390

Re : Identification

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 tongue ). Bon courage

Hors ligne

Pied de page des forums