Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
je débute tout juste avec postgresql.
je m’exerce donc à créer une petite base (1 table pour le moment) avec des utilisateurs (roles) ayant des droits différents.
je voudrais interfacer ma base avec une page web, et utiliser les session de php pour autoriser (ou non) les différentes actions d'un utilisateur dès lors qu'il s'est loggé et tout au long de la navigation sur le site.
Ma question est : puis-je utilisé pour identifier mes utilisateurs la table système pg_roles ou doit créer une table user de toutes pièces (et dans ce cas comment je gère les droits select, insert, update, delete sur les tables)?
Merci d'avance
Hors ligne
Vous pouvez utiliser la table système mais il faudra passer par les autres SQL habituels (style CREATE USER).
Guillaume.
Hors ligne
j'ai donc utilisé la tbl pg_roles, et adapté un script conçu initialement pour mysql
mon souci est que l'identification est tjs refusé : Votre nom ou votre mot de passe est incorrect
script pour se logger:
<form action="/session/session.php" method="post">
<input name="name" type="text" size="12" value="" /> Name<br />
<input name="pass" type="text" size="12" value="" /> Password<br />
<input name="submit" type="submit" value="Connexion" />
</form>
et script d'authentification
<?php
//initialisation de la session
session_start();
//si les champs ont été remplis
if (!$_POST['name']=="" && !$_POST['pass']=="")
{
//on récupère les valeurs des champs
$name = $_POST['name'];
$pass = md5($_POST['pass']);
//connexion à la base de donnée
$connect = pg_connect("host=localhost port=5432 dbname=madbpg user=postgres password=****");
echo $name;
$sql= "SELECT rolpassword FROM pg_roles WHERE rolname like '$name';";
echo $sql."</br>";
$sql = pg_query($connect, $sql);
$row = pg_fetch_array($sql, 0, PGSQL_NUM);
$pass_sql= $row[0];
//on teste si le mot de passe correspond à la base de donnée
if ($pass_sql == $pass)
{
//l'utilisateur est valide
//on crée la variable de session avec son nom
$_SESSION['name'] = $name;
$msg = 'Vous êtes correctement indentifié';
}
else {
//sinon on avertit l'utilisateur
$msg = 'Votre nom ou votre mot de passe est incorrect<br />';
$msg .= '<a href="/index.php">Retour</a>';}
//fermeture de la connexion
pg_close();}
else {
//un des champs n'est pas rempli
$msg = 'Votre nom et/ou votre mot de passe n\'est pas renseigné<br />';
$msg .= '<a href="/index.php">Retour</a>';}
//on affiche le resultat
echo $msg;
?>
merci de votre aide
Hors ligne
Vous avez essayé la requête à partir de psql ? parce que rolpassword renvoie toujours ***** quelque soit le mot de passe.
Guillaume.
Hors ligne
Finalement j'ai décidé de procéder d'une autre manière :
1-affichage de la page de connexion
<form action="/session2/connexion.php" method="post">
<input name="name" type="text" size="12" value="" /> Name<br />
<input name="pass" type="password" size="12" value="" /> Password<br />
<input name="submit" type="submit" value="Connexion" />
</form>
2-sur le clic du bouton connexion on traite l'identification avec le fichier connexion.php
<?php
//initialisation de la session
session_start();
//si les champs ont été remplis
if (!$_POST['name']=="" && !$_POST['pass']=="")
{
//on récupère les valeurs des champs
$name = $_POST['name'];
$pass = $_POST['pass'];
//connexion à la base de donnée
$connect = @pg_connect("host=localhost port=5432 dbname=madbpg user=$name password=$pass");
//echo pg_last_error($connect);
if (!$connect) {
header('Location: stop.php');
}
else {
echo "connexion ok";
$_SESSION['name'] = $name;
$_SESSION['pass']= $pass;
echo "<a href=\"lien.php\">Cliquez ici<\a>";
}
}
?>
donc si la conexion foncttionne j'affiche "connexion ok" , je passe le nom d'utilisateur et son mot de passe dans la session et je teste avec un lien vers une page faisant appel à une requete sur la bdd
3-affichage de la page lien et utilisation des variables de session
<?php
require 'auth.php';
echo $_SESSION['name'];
echo $_SESSION['pass'];
$name = $_SESSION['name'];
$pass = $_SESSION['pass'];
$connect = pg_connect("host=localhost port=5432 dbname=madbpg user=$name password=$pass");
$result = pg_query($connect, "SELECT * from tbl_pente");
if (!$result) {
echo "Une erreur s'est produite.\n";
exit;
}
while ($row = pg_fetch_row($result)) {
echo "ID: $row[0] TYPE: $row[1] VAL: $row[2] REPET: $row[2]";
echo "<br />\n";
}
?>
et je vérifie l'authentification à chaque page avec require 'auth.php'
<?php
session_start();
//on vérifie que l'utilisateur est identifé
if (!isset($_SESSION['name'])) {
//si la variable de session n'existe pas
//on redirige l'utilisateur vers le formulaire d'identification
header('Location: ./index.php');
//on arrête l'exécution
exit();}
else
{
$name=$_SESSION['name'];
$pass=$_SESSION['pass'];
}
?>
mes soucis sont
-que le mot de passe passe en clair, impossible de le faire fonctionner en le
passant en md5
-que je n'arrive pas à passer les variables de session telles quelles dans les connexions
je suis obligé de les repasser dans une variable classique avant (je pense que je vais faire un autre fichier php pour cela ça évitera de le faire pour chaque page)
dans l'attente de vos remarques!
Hors ligne
Quand vous parlez de md5, vous voulez parler de l'authentification PostgreSQL en md5 ? je ne vois pas en quoi cela peut poser un problème quelconque ?
Guillaume.
Hors ligne
oui c'est bien lors de l'authentification
j'ai adapté un code que j'ai trouvé sur le net prévu pour MySQL et qui utilise le cryptage en md5; d'où mon interrogation.
Encore merci pour vos remarques, c'est toujours constructif!
Hors ligne
Pages : 1