Welcome, you're not connected. ( Log in - Register )

Les commandes sont pour le moment fermées jusqu'à nouvel ordre, mais je peux assurer le support.

Merci de votre compréhension.


Requests are currently closed, but I can do some support.

Thanks for your understanding.




Important links - Liens importants

Règles - Rules | Présentez-vous - Introduce yourself | Problème d'inscription ? - Registration problem ?

Ishimaru-Design > Tutoriaux, ressources et support (fr) > FluxBB 1.4 > Tutoriels > [fluxbb] Formulaire de connexion sur son site

RSS >  [fluxbb] Formulaire de connexion sur son site
Ishimaru Chiaki #1 09/08/2011 - 21h37

Class : ID Admin
Posts : 1435
Registered on : 12/11/2007
Age : 28
Sex : Female

Offline Mail Www

Vous faites votre site en utilisant les sessions de FluxBB et vous voulez insérer un bloc de connexion et des raccourcis utilisateur sur votre site ?

Cette astuce vous montre à en ajouter un.

Prérequis

Vous devez avoir inclus le fichier common.php du forum avant l'entête du site avant de suivre ce tuto.  Pour le faire, consultez la page de la documentation à ce sujet

Création du fichier

Commencez d'abord par créer le nouveau fichier qui contiendra le code (quicklogin.php), puis incluez-le où vous le voulez (ex: header, menu latéral)

<?php include('include/quicklogin.php'); ?>
(faites de préférence un dossier spécifique pour les différents fichiers inclus de votre site, ça fait plus rangé)

Pour la suite, je donnerai les codes en fonction d'un affichage dans un menu latéral.  Vous n'avez qu'à adapter le code HTML pour vos besoins.
Aussi, même si j'utilise un système de clés de langue sur mon site, je donnerai les codes avec les textes en dur.  Libre à vous de les rendre localisables comme je le fais.

La condition

Puisque l'on veut que le formulaire de connexion ne s'affiche que si l'utilisateur est connecté, on doit utiliser une condition pour vérifier s'il est connecté ou non.

Pour cela, on va utiliser la variable utilisateur $pun_user['is_guest'] pour effectuer la vérification.

Et le tout, dans une condition if...else :
<?php
if ($pun_user['is_guest'])
{
   //Contenu à afficher pour les invités, c'est à dire le formulaire de connexion
}
else
{
   //Contenu à afficher pour l'utilisateur enregistré (ex: profil, messagerie, déconnexion, etc.)
}
   ?>


On est prêt pour la suite !

Le formulaire de connexion

Voici le code à insérer dans la première partie de la condition :
   <!-- Panneau de connexion -->
   <div class="submenu">
     <h2>Connexion</h2>
     <form id="login" action="<?php echo PUN_ROOT.'login.php?action=in'; ?>" method="post">
       <p class="form">
         <input type="hidden" name="form_sent" value="1" />
         <input type="hidden" name="redirect_url" value="<?php echo $_SERVER['PHP_SELF']; ?>" />
         <label for="username">Nom d'utilisateur &nbsp;</label><input class="fastlogin" id="username" type="text" name="req_username" size="10" /><br />
         <label for="password">Mot de passe &nbsp;</label><input class="fastlogin" id="password" type="password" name="req_password" size="10" /><br />
         <label for="autologin">Connexion auto ? &nbsp;</label><input class="check" id="autologin" type="checkbox" checked="checked" name="save_pass" />
       </p>
       <p class="submit">
         <input class="connect" type="submit" name="login" value="Connexion" /> <a href="<?php echo PUN_ROOT.'register.php' ?>"><button class="connect">Inscription</button></a>
       </p>
     </form>
   </div>


Vous pouvez remarquer cette ligne :
         <input type="hidden" name="redirect_url" value="<?php echo $_SERVER['PHP_SELF']; ?>" />

La variable $_SERVER['PHP_SELF'] permet de récupérer le chemin de la page courante depuis la racine de votre site.  L'utilisation de cette variable permet au script de redirection de la page login.php du forum de rediriger l'utilisateur sur la page du site et non vers l'index du forum si la connexion réussit.

Voici ce que ça donne jusqu'ici :
<?php
if ($pun_user['is_guest'])
{
   ?>
   <!-- Panneau de connexion -->
   <div class="submenu">
     <h2>Connexion</h2>
     <form id="login" action="<?php echo PUN_ROOT.'login.php?action=in'; ?>" method="post">
       <p class="form">
         <input type="hidden" name="form_sent" value="1" />
         <input type="hidden" name="redirect_url" value="<?php echo $_SERVER['PHP_SELF']; ?>" />
         <label for="username">Nom d'utilisateur &nbsp;</label><input class="fastlogin" id="username" type="text" name="req_username" size="10" /><br />
         <label for="password">Mot de passe &nbsp;</label><input class="fastlogin" id="password" type="password" name="req_password" size="10" /><br />
         <label for="autologin">Connexion auto ? &nbsp;</label><input class="check" id="autologin" type="checkbox" checked="checked" name="save_pass" />
       </p>
       <p class="submit">
         <input class="connect" type="submit" name="login" value="Connexion" /> <a href="<?php echo PUN_ROOT.'register.php' ?>"><button class="connect">Inscription</button></a>
       </p>
     </form>
   </div>
   <?php
}
else
{
   //Contenu à afficher pour l'utilisateur enregistré (ex: profil, messagerie, déconnexion, etc.)
}
?>


Maintenant, vous avez votre formulaire, mais vous aimeriez sûrement afficher des liens tels que Déconnexion, Profil, Messagerie (si vous avez installé un mod pour ça) et Mes interventions, pour les utilisateurs enregistrés.
Pour cela, suivez la partie qui suit.

Bloc de liens de l'utilisateurs

Voici le code à inclure dans la deuxième partie de la condition :
   <!-- Options de l'utilisateur -->
   <div class="submenu">
     <h2><?php echo $pun_user['username']; ?></h2>
     <ul>
       <li><a href="<?php echo PUN_ROOT.'profile.php?id='.$pun_user['id']; ?>">Profil</a></li>
       <!-- Spécifique au mod New Private Messaging System - Supprimez ce lien si vous n'utilisez pas ce mod -->
       <li><a href="<?php echo PUN_ROOT.'pmsnew.php'; ?>">Messagerie</a></li>
       <li><a href="<?php echo PUN_ROOT.'search.php?action=show_replies'; ?>">Mes interventions</a></li>
       <!-- Si vous avez un panel d'administration spécifique au site -->
       <?php if ($pun_user['is_admmod']): echo '<li><a href="admin.php">Administration</a></li>'; endif; ?>
       <li><a href="<?php echo 'logout.php?action=out&amp;id='.$pun_user['id'].'&amp;csrf_token='.pun_hash($pun_user['id'].pun_hash(get_remote_address())); ?>">Déconnexion</a></li>
     </ul>
   </div>


Vous remarquerez que seul le lien de déconnexion n'utilise pas la constante PUN_ROOT.  La raison est simple :
Lorsqu'on se déconnecte, on ne peut être redirigé que vers l'index du forum, et donc, c'est indiqué en dur dans la page login.php.  Cela obligerait donc de devoir modifier ce fichier pour être capable de rediriger vers l'index du site, en plus que c'est très difficilement pensable d'utiliser la variable $_SERVER['PHP_SELF'] pour une valeur qui sera transférée par une variable $_GET, car si le lien à transférer contient lui-même plusieurs variables, cela devient difficile à gérer sans risquer de se retrouver avec une faille de sécurité qui permettrait à un pirate de rediriger vers un site malveillant.

Afin donc de régler ce problème sans trop me casser la tête, je vous recommande de créer un fichier logout.php à la racine de votre site et d'y insérer ce code tiré du fichier login.php du forum :
<?php

/**
* Copyright (C) 2008-2011 FluxBB
* based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
* License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
*/

if (isset($_GET['action']))
   define('PUN_QUIET_VISIT', 1);

define('PUN_ROOT', 'fluxbb14/'); //Change this value if the board's path is different
require PUN_ROOT.'include/common.php';
define('SITE_ROOT', '/sites/ishimaru-v6/index.php'); //Page where you want your users to be redirected.  Use $_SERVER['PHP_SELF'] to find it

// Load the login.php language file
require PUN_ROOT.'lang/'.$pun_user['language'].'/login.php';

$action = isset($_GET['action']) ? $_GET['action'] : null;

if ($action == 'out')
{
   if ($pun_user['is_guest'] || !isset($_GET['id']) || $_GET['id'] != $pun_user['id'] || !isset($_GET['csrf_token']) || $_GET['csrf_token'] != pun_hash($pun_user['id'].pun_hash(get_remote_address())))
   {
       header('Location: index.php');
       exit;
   }

   // Remove user from "users online" list
   $db->query('DELETE FROM '.$db->prefix.'online WHERE user_id='.$pun_user['id']) or error('Unable to delete from online list', __FILE__, __LINE__, $db->error());

   // Update last_visit (make sure there's something to update it with)
   if (isset($pun_user['logged']))
       $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_setcookie(1, pun_hash(uniqid(rand(), true)), time() + 31536000);

   redirect(SITE_ROOT, $lang_login['Logout redirect']);
}
else
   header('Location: index.php');
   exit;


De cette façon, vous serez redirigé vers l'index de votre site et non vers l'index du forum.

Ensuite, si vous n'utilisez pas le mod New Private Messaging System, vous pouvez enlever la ligne suivante :
       <li><a href="<?php echo PUN_ROOT.'pmsnew.php'; ?>"><?php echo $lang['usr_pms']; ?></a></li>

Et finalement, si vous n'avez pas de panel d'administration spécifique au site, vous pouvez aussi enlever ceci :
       <?php if ($pun_user['is_admmod']): echo '<li><a href="admin.php">Administration</a></li>'; endif; ?>

Voilà ce que ça donne au final :
<?php
if ($pun_user['is_guest'])
{
   ?>
   <!-- Panneau de connexion -->
   <div class="submenu">
     <h2>Connexion</h2>
     <form id="login" action="<?php echo PUN_ROOT.'login.php?action=in'; ?>" method="post">
       <p class="form">
         <input type="hidden" name="form_sent" value="1" />
         <input type="hidden" name="redirect_url" value="<?php echo $_SERVER['PHP_SELF']; ?>" />
         <label for="username">Nom d'utilisateur &nbsp;</label><input class="fastlogin" id="username" type="text" name="req_username" size="10" /><br />
         <label for="password">Mot de passe &nbsp;</label><input class="fastlogin" id="password" type="password" name="req_password" size="10" /><br />
         <label for="autologin">Connexion auto ? &nbsp;</label><input class="check" id="autologin" type="checkbox" checked="checked" name="save_pass" />
       </p>
       <p class="submit">
         <input class="connect" type="submit" name="login" value="Connexion" /> <a href="<?php echo PUN_ROOT.'register.php' ?>"><button class="connect">Inscription</button></a>
       </p>
     </form>
   </div>
   <?php
}
else
{
   ?>
   <!-- Options de l'utilisateur -->
   <div class="submenu">
     <h2><?php echo $pun_user['username']; ?></h2>
     <ul>
       <li><a href="<?php echo PUN_ROOT.'profile.php?id='.$pun_user['id']; ?>">Profil</a></li>
       <!-- Spécifique au mod New Private Messaging System - Supprimez ce lien si vous n'utilisez pas ce mod -->
       <li><a href="<?php echo PUN_ROOT.'pmsnew.php'; ?>">Messagerie</a></li>
       <li><a href="<?php echo PUN_ROOT.'search.php?action=show_replies'; ?>">Mes interventions</a></li>
       <!-- Si vous avez un panel d'administration spécifique au site -->
       <?php if ($pun_user['is_admmod']): echo '<li><a href="admin.php">Administration</a></li>'; endif; ?>
       <li><a href="<?php echo 'logout.php?action=out&amp;id='.$pun_user['id'].'&amp;csrf_token='.pun_hash($pun_user['id'].pun_hash(get_remote_address())); ?>">Déconnexion</a></li>
     </ul>
   </div>
   <?php
}
?>


Il ne vous reste plus qu'à styler tout ça avec du CSS !
Arnone #2 20/01/2012 - 11h13

Class : ID Newbie
Posts : 3
Registered on : 20/01/2012

Offline

Bonjour,
superbe tuto qui m'est très utile !  :D

Par contre, je rencontre le problème suivant :

Lorsque j'essaie de me connecter via une page dont l'url contient des variables du style :

http://www.monsite.com/mapage.php?id=1&titre=mon%2titre

la connexion a bien lieu mais je suis ensuite redirigé vers http://www.monsite.com/mapage.php et non vers
http://www.monsite.com/mapage.php?id=1&titre=mon%2titre

J'imagine que mon problème vient de la fonction $_SERVER['PHP_SELF'] qui ne reconnait pas ces variables...?

Merci pour votre aide
Ishimaru Chiaki #3 20/01/2012 - 23h16

Class : ID Admin
Posts : 1435
Registered on : 12/11/2007
Age : 28
Sex : Female

Offline Mail Www

En fait, j'ai eu moi-même des problèmes pour implémenter la prise en compte des URL à variables car ça m'aurait quasiment pris un gros regex juste pour empêcher les tentatives de piratage par variable GET…  Je me suis donc pour le moment contentée de ne prendre en compte que la page choisie.  Peut-être qu'en allant demander directement sur fluxbb.fr où j'y ai également posté l'astuce : http://fluxbb.fr/forums/viewtopic.php?id=12164

Juste en passant, ptit oubli ?
http://ishimaru-design.servhome.org/forum/forum-tg13,the-hall-introduce-yourself-presentez-vous.html
Arnone #4 20/02/2012 - 16h15

Class : ID Newbie
Posts : 3
Registered on : 20/01/2012

Offline

salut, en fait j'ai trouvé une solution (certainement pas idéale) en utilisant $_SERVER['QUERY_STRING']

<input type="hidden" name="redirect_url" value="<?php echo $_SERVER['PHP_SELF']; ?>?<?php echo $_SERVER['QUERY_STRING']; ?>" />

ce n'est pas très joli car en l'absence de variable j'obtient une url du type :
http://www.monsiteweb.php?   mais cela fonctionne ...


ps : oups j'avais zappé la présentation  :gene:

 >  Fast reply

Message

Ishimaru-Design > Tutoriaux, ressources et support (fr) > FluxBB 1.4 > Tutoriels > [fluxbb] Formulaire de connexion sur son site

 >  Stats

1 user(s) connected during the last 10 minutes (0 member(s) and 1 guest(s)).