[AJAX] Formulaire de connexion à phpBB

Olivier Duffez (admin)
Membre du personnel
Bonjour,
Je cherche à améliorer WRI en créant un formulaire de connexion au forum phpBB en AJAX. L'intérêt ne serait pas directement pour le forum (!) mais plutôt sur d'autres rubriques du site qui ne sont accessibles qu'aux membres.
Par exemple sur une page d'inscription à l'annuaire, au lieu de dire "allez d'abord vous connecter au forum et débrouillez-vous pour revenir ici", j'aurai un formulaire de connexion qui, une fois validé, laissera l'utilisateur remplir le formulaire d'inscription.
J'espère que j'ai été clair et surtout que quelqu'un pourra me donner une idée sur la façon la plus simple de faire ceci !
Olivier
 
WRInaute passionné
Plop !

Alors voilà, sur Aido j'avais réussi un temps mais j'ai eu des problèmes sur le site, j'ai du réenvoyer une ancienne sauvegarde et je me souviens plus trop comment j'avais fait, mais regarde : -www.aidoforum.com, tu as le formulaire de connexion sur chaque page, avec en hidden le chemin de la page, et tu peux l'utiliser pour dire à forum/login.php où redigier la personne via ce tuto : http://www.aidoforum.com/tutoriaux-340- ... exion.html

Tu me dis si tu y arrives, et je te dis si j'y re-arrive :)
 
WRInaute impliqué
La ou tu veux afficher le formulaire d'identification :

Code:
<script type="text/javascript">
function submithis(form) {
	var login = form.login.value;
	var password = form.password.value;
	var xhr_object = null;
	if ( window.XMLHttpRequest )
		xhr_object = new XMLHttpRequest();
	else if ( window.ActiveXObject )
		xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
	else {
		document.location = "login.php";
		}
	if ( xhr_object != null ) {
		xhr_object.open("POST", "/login.php", true);
		xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		var vars = "post=ajax&login="+login+"&password="+password;
		xhr_object.send(vars);
		xhr_object.onreadystatechange = function() {
			if ( xhr_object.readyState == 4 ) {
				var result = xhr_object.responseText;
				if ( result == 1 ) {
					document.getElementById("formulaire").innerHTML = "code html de ton formulaire";
					}
				else {
					document.getElementById("formulaire").innerHTML = "erreur de login ou password";
					}
				}
			}
		}
	return false;
	}
</script>

<div id="formulaire">
	<form action="login.php" method="post" onsubmit="return submithis(this)">
		<input type="text" name="login" />
		<input type="password" name="password" />
		<input type="submit" value="Envoyer" />
	</form>
</div>

Et dans login.php, tu fait un petit morceau du style :
Code:
<?
if ( $_POST["post"] == "ajax" ) {
	Et là, tu gère l'authentification en fonction des variables
	$_POST["login"] et $_POST["password"],
	si c'est ok, tu retourne 1, sinon 0
	}
?>
 
Olivier Duffez (admin)
Membre du personnel
Merci NxtGen j'avance mais pour l'instant je butte sur le contenu de login.php
En effet il faut faire plus qu'une simple vérification login/password dans la base de données puisqu'il faut démarrer une nouvelle session "compatible phpBB".
Peut-être faut-il fouiller dans le code de login de phpBB ou bien il y a une façon simple de faire.
Si quelqu'un a des idées je suis preneur !
 
WRInaute impliqué
WebRankInfo a dit:
Merci NxtGen j'avance mais pour l'instant je butte sur le contenu de login.php
En effet il faut faire plus qu'une simple vérification login/password dans la base de données puisqu'il faut démarrer une nouvelle session "compatible phpBB".
Peut-être faut-il fouiller dans le code de login de phpBB ou bien il y a une façon simple de faire.
Si quelqu'un a des idées je suis preneur !

Je n'ai pas le fichier login.php de PhpBB sous la main, mais tu devrais essayer un truc comme ca :

Dans login.php tu cherches les lignes où il vérifie le login et le mot de passe.
A mon avis, ca marche à coups de If ( blablabl ) { ... } else { blablab }
il faut que tu rajoutes, dans chacun des cas (login ok ou non) :

Dans la partie où normalement phpBB retourne une page de confirmation :
Code:
<?
// Authentification via Ajax
if ( $_POST["post"] == "ajax" ) { 
   echo "1"; // Renvoi simplement "1" au script ajax, le formulaire sera donc affiché.
   exit;
   }
?>

Et dans la partie ou phpBB te dis login ou mot de passe incorrect :
Code:
<?
// Authentification via Ajax
if ( $_POST["post"] == "ajax" ) { 
   echo "0"; // Renvoi simplement "0" au script ajax, le message d'erreur appaitra.
   exit;
   }
?>

Je ne pense pas qu'il soit nécessaire de modifier autre chose dans login.php, avec ces 2 lignes, au lieux de rediriger vers une page du forum, le script php retournera juste 0 ou 1, mais l'authentification, la mise en route des sessions, etc, devrais se faire normalement.
 
Olivier Duffez (admin)
Membre du personnel
ok maintenant ça marche :)

il me reste à comprendre la logique habituelle des sites avec de l'ajax pour m'organiser, je m'explique : disons que j'ai une page qui propose des choses accessibles seulement aux membres (loggués).

Grâce au script ci-dessus j'arrive à faire un script de connexion sans quitter la page, mais je ne sais pas bien comment faire une fois que ce formulaire est validé et le membre connecté : il faudrait recharger la page pour que les fonctionnalités accessibles aux membres uniquement s'affichent.

J'ai sans doute raté un truc car je me vois mal mettre toute la partie qui gère les fonctionnalités avancées dans la ligne
Code:
document.getElementById("formulaire").innerHTML = "code html de ton formulaire"

(je cherche à faire un système qui puisse s'appliquer à n'importe quelle page du site qui nécessite d'être loggué)
 
WRInaute impliqué
voila une idée :

dans la page réservé aux membres, tu mets dans la source php ce que tu veux afficher entre deux lignes bien définies, par exemple

# début membre
texte et code html a afficher une fois identifié
# fin membre

et dans la page login.php, au lieu de faire "echo 1" pour dire au javascript que c'est bon, tu fait un fopen du fichier php et tu places dans une variable le contenu entre ces deux lignes, et tu fais un echo $variable, ainsi tu peux utiliser le meme principe pour toutes les pages que tu veux, et surtout, le code a afficher n'est pas en clair dans le javascript avant d'être loggué :)
 
WRInaute impliqué
Bah je suis trés bidouilleur ^^
sinon tu peux mettre dans le fichier php

Code:
<?
if ($page == "ajax" ) {
$texte = "ton code";
exit
}
?>

et dans le login tu fais un

Code:
<?
$page = "ajax";
include('page.php');
echo $texte;
exit;
?>

C'est peu etre un peu plus propre...
par contre faut que tu trouves comment indiquer la bonne page dans le include, c'est peut etre fesable avec le referer, mais j'en suis pas sur :)

Y'a surement une idée bien meilleure, mais j'ai pas encore eu l'illumination ^^
 
Discussions similaires
Haut