comment récupérer les info d'openid

Répondre
fanfantasy7
le 05/03/2010 à 13:45
fanfantasy7
bonjour,
j'aimerai savoir comment on peut récupérer les infos d'un compte openid aprés authentification ?

openid.php
<?php
if (!isset($_POST['submit'])) {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title></title>
</head>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Entrez votre OpenID: <br/>
<input type="text" name="id" size="30" />
<br />
<input type="submit" name="submit" value="Log In" />
</form>
</body>
</html>
<?php
} else {
// vérifie les valeurs du formulaire
if (trim($_POST['id'] == '')) {
die("ERROR: Entrez un OpenID valide svp.");
}

// fichiers inclus
require_once "Auth/OpenID/Consumer.php";
require_once "Auth/OpenID/FileStore.php";

// démarrage de la session (requis pour YADIS)
session_start();

// crée une zone de stockage pour les données OpenID
$store = new Auth_OpenID_FileStore('./oid_store');

// crée un consommateur OpenID
$consumer = new Auth_OpenID_Consumer($store);

// commence le process d'authentification
// crée une requête d'authentification pour le fournisseur OpenID
$auth = $consumer->begin($_POST['id']);
if (!$auth) {
die("ERROR: Entrez un OpenID valide svp.");
}

// redirige vers le fournisseur OpenID pour l'authentification
$url = $auth->redirectURL('http://192.168.1.21/essai_tech/openid/', 'http://192.168.1.21/essai_tech/openid/oid_return.php');
/* $url = $auth->redirectURL('http://localhost/essai_tech/openid/', 'http://localhost/essai_tech/openid/oid_return.php'); */
header('Location: ' . $url);
}
?>

iod_return.php
<?php
// Fichiers inclus
require_once "Auth/OpenID/Consumer.php";
require_once "Auth/OpenID/FileStore.php";
require_once "Auth/OpenID/SReg.php";

// démarre la session (requis pour YADIS)
session_start();

// crée une zone de stockage pour les données OpenID
$store = new Auth_OpenID_FileStore('./oid_store');

// crée un consommateur OpenID
// Lit la réponse du fournisseur OpenID
$consumer = new Auth_OpenID_Consumer($store);
$response = $consumer->complete('http://192.168.1.21/essai_tech/openid/oid_return.php');

// renseigne les valeurs en fonction de celles de l'authentification
if ($response->status == Auth_OpenID_SUCCESS)
{
$_SESSION['OPENID_AUTH'] = true;

$sreg = new Auth_OpenID_SRegResponse();
$obj = $sreg->fromSuccessResponse($response);
$data = $obj->contents();
$_SESSION['var_openid']=$data;
}
else
{
$_SESSION['OPENID_AUTH'] = false;
}

// redirige vers la zone restreinte
header('Location: restricted.php');
?>

restricted.php
<?php
session_start ();
// Vérifie le statue de l'authentification
if (!isset($_SESSION['OPENID_AUTH']) || $_SESSION['OPENID_AUTH'] !== true) {
die ('Vous n\'avez pas le droit d\'acc&eacute;der a cette page! Loggez-vous svp.<br><a href="openid.php">retour</a>');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title></title>
</head>
<body>
<h2>Page restreinte</h2>
<p>Vous voyez cette page seulement car l'authentification OpenID a fonctionn&eacute;e.</p>

<p>
<?php
echo 'var_openid = '.$_SESSION['var_openid']['dob'].'<br>';
if (isset($data['email']))
{
echo 'email = '.$data['email'];
}
else
{
echo 'pas d\'email';
}
?>
</p>


<p>
<a href="openid.php">retour</a><br>
<a href="http://www.openidfrance.fr/logout.html">D&eacute;connexion du site openID</a><br>
<a href="logout.php">D&eacute;connexion de la session</a><br>
</p>
</body>
</html>



en fait mon problème est que
pendant l'authentification sur toutes les info j'ai "Status : Non demandé"
et donc $data['email'] est vide
merci d'avance
Fanfantasy7
moogli
le 05/03/2010 à 15:33
moogli
salut,

d'ou sirt $data dans ta dernière page ?

au vue de la page de nulle part donc normal qu'il n'y ai pas d'email, je te conseil de revoir la structure de ton appli ;)

@+
Il en faut peu pour être heureux !!!!!
fanfantasy7
le 05/03/2010 à 16:24
fanfantasy7
dans cette page, il y a le code qui récupére l'email
http://jcrozier.developpez.com/tutoriels/web/php/openid/
j'ai fait la même chose mais ça marche pas
Fanfantasy7
Keika
le 07/03/2010 à 04:06
Keika
oui monsieur, tu declare ton $data dans une differente page, donc la pas restreinte ne peux pas y acceder, cependant tu mets $data dans une variable de SESSION la ligne juste en dessus... Tu devrais utiliser cette variable...
Le PHP --> C'est dur !
fanfantasy7
le 08/03/2010 à 08:36
fanfantasy7
oui ben justement, même en passant par $_SESSION j'ai rien, mais le problème n'est pas de passé la variable d'un page a une autre, mais bien une problème de lecture d'information
Fanfantasy7
moogli
le 08/03/2010 à 12:25
moogli
que donne un var_dump($_SESSION['var_openid']); sur la dernière page ?

que donne se même code juste après le $_SESSION['var_openid']=$data ?

a tu un exemple de donnée sur l'on peu exploiter ?

fait nous un beau wall de ton dernier code afin que l'on y vois clair.

a tu des messages d'erreur ?

@+
Il en faut peu pour être heureux !!!!!
fanfantasy7
le 08/03/2010 à 16:34
fanfantasy7
var_dump($_SESSION['var_openid']); donne array(0) { }

aprés le $_SESSION['var_openid']=$data
ça donne array(0) { }

qu'entendez-vous par exemple de donnée
ormis la documentation openid qu'on trouve sur google je n'ais rien

je n'ais pas d'erreur, ormis quand je fait un echo d'une variable dans iod_return.php, ou j'ai une erreur
Warning: Cannot modify header information
ce qui est normal

openid.php
<?php
if (!isset($_POST['submit'])) {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title></title>
</head>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Entrez votre OpenID: <br/>
<input type="text" name="id" size="30" />
<br />
<input type="submit" name="submit" value="Log In" />
</form>
</body>
</html>
<?php
} else {
// vérifie les valeurs du formulaire
if (trim($_POST['id'] == '')) {
die("ERROR: Entrez un OpenID valide svp.");
}

// fichiers inclus
require_once "Auth/OpenID/Consumer.php";
require_once "Auth/OpenID/FileStore.php";

// démarrage de la session (requis pour YADIS)
session_start();

// crée une zone de stockage pour les données OpenID
$store = new Auth_OpenID_FileStore('./oid_store');

// crée un consommateur OpenID
$consumer = new Auth_OpenID_Consumer($store);

// commence le process d'authentification
// crée une requête d'authentification pour le fournisseur OpenID
$auth = $consumer->begin($_POST['id']);
if (!$auth) {
die("ERROR: Entrez un OpenID valide svp.");
}

// redirige vers le fournisseur OpenID pour l'authentification
$url = $auth->redirectURL('http://192.168.1.21/essai_tech/openid/', 'http://192.168.1.21/essai_tech/openid/oid_return.php');
/* $url = $auth->redirectURL('http://localhost/essai_tech/openid/', 'http://localhost/essai_tech/openid/oid_return.php'); */
header('Location: ' . $url);
}
?>

oid_return.php
<?php
// Fichiers inclus
require_once "Auth/OpenID/Consumer.php";
require_once "Auth/OpenID/FileStore.php";
require_once "Auth/OpenID/SReg.php";

// démarre la session (requis pour YADIS)
session_start();

// crée une zone de stockage pour les données OpenID
$store = new Auth_OpenID_FileStore('./oid_store');

// crée un consommateur OpenID
// Lit la réponse du fournisseur OpenID
$consumer = new Auth_OpenID_Consumer($store);
$response = $consumer->complete('http://192.168.1.21/essai_tech/openid/oid_return.php');

// renseigne les valeurs en fonction de celles de l'authentification
if ($response->status == Auth_OpenID_SUCCESS)
{
$_SESSION['OPENID_AUTH'] = true;

// récupère les informations d'enregistrement
$sreg = new Auth_OpenID_SRegResponse();
$obj = $sreg->fromSuccessResponse($response);
$data = $obj->contents();
$_SESSION['var_openid']=$data;
}
else
{
$_SESSION['OPENID_AUTH'] = false;
}

// redirige vers la zone restreinte
header('Location: restricted.php');
?>

restricted.php
<?php
// Vérifie le statue de l'authentification
session_start();
if (!isset($_SESSION['OPENID_AUTH']) || $_SESSION['OPENID_AUTH'] !== true)
{
die ('Vous n\'avez pas le droit d\'acc&eacute;der a cette page! Loggez-vous svp.<br><a href="openid.php">retour</a>');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title></title>
</head>
<body>
<h2>Page restreinte</h2>
<p>Vous voyez cette page seulement car l'authentification OpenID a fonctionn&eacute;e.</p>

<p>
<?php
echo 'var_dump = ';
var_dump($_SESSION['var_openid']);
echo '<br>';
echo 'var_openid dob = '.$_SESSION['var_openid']['dob'].'<br>';
echo 'var_openid email = '.$_SESSION['var_openid']['email'].'<br>';
if (isset($data['email']))
{
echo 'email = '.$data['email'];
}
else
{
echo 'pas d\'email';
}
?>
</p>


<p>
<a href="openid.php">retour</a><br>
<a href="http://www.openidfrance.fr/logout.html">D&eacute;connexion du site openID</a><br>
<a href="logout.php">D&eacute;connexion de la session</a><br>
</p>
</body>
</html>

logout.php
<?php

session_start();
//détruire les variables de la session
session_unset();


echo '
<html>
<head>
<title>
logout
</title>
</head>
<body>

<br />
';


//détruire la session
if (session_destroy())
{
echo 'Vous &ecirc;tes d&eacute;connect&eacute;<br />';
}
else
{
echo 'Erreur : impossible de d&eacute;truire la session !<br />';
}

unset($_SESSION);

echo '
</body>
</html>
';

?>
Fanfantasy7
Keika
le 08/03/2010 à 23:20
Keika
hmm ne faut-il p[as mettre session_start() en tout premiere ? dans tes trois premiers fichiers...
Le PHP --> C'est dur !
fanfantasy7
le 09/03/2010 à 08:20
fanfantasy7
maintenant les 2 premières ligne de chaques fichiers sont
<?php
session_start();

mais toujours pareille
array(0) { }
Fanfantasy7
Répondre
LoadingChargement en cours