Authentification HTTP avec MySQL

Authentification HTTP avec MySQL - PHP - Programmation

Marsh Posté le 13-01-2005 à 19:12:07    

Bonjour,
 
Voilà je suis en train de réaliser l'authentification HTTP avec des login/password dans la base données, mais ça ne fonctionne pas.
 

Code :
  1. //affichage de la fenetre
  2. if (!isset($_SERVER['PHP_AUTH_USER']) && !isset($_SERVER['PHP_AUTH_PW'])) {
  3. header("WWW-Authenticate: Basic realm=\"Administration\"" );
  4.     header("HTTP/1.0 401 Unauthorized" );
  5.     exit();
  6. }
  7. //acces a la partie prive
  8. else {
  9. $class->sql("SELECT abo_id
  10.     FROM pavut_abonnes
  11.     WHERE abo_login='".$_SERVER['PHP_AUTH_USER']."'
  12.     AND abo_type!='user'" );
  13. //Si l'utilisateur existe
  14. if ($class->num_rows()==1 && is_numeric($_SERVER['PHP_AUTH_PW'])) {
  15.   $class->sql("SELECT abo_id, abo_nom, abo_prenom, abo_passwd, abo_type
  16.       FROM pavut_abonnes
  17.       WHERE abo_login='".$_SERVER['PHP_AUTH_USER']."' AND abo_passwd=PASSWORD(".$_SERVER['PHP_AUTH_PW']." )" );
  18.   //Si l'utilisateur n'est pas trouvé : redirection 401
  19.   if ($class->num_rows()==0) {
  20.    header("HTTP/1.0 401 Unauthorized" );
  21.    exit();
  22.   }
  23. }
  24. //sinon redirection 401
  25. else {
  26.   header("HTTP/1.0 401 Unauthorized" );
  27.   exit();
  28. }
  29. }


 
En fait quand j'essaie de me logguer, j'ai une page blanche sans rien, on dirait que je vais sur l'erreur 401...
 
Déjà est ce que le code est bon ? des choses à changer surement ou ameliorer non ?

Reply

Marsh Posté le 13-01-2005 à 19:12:07   

Reply

Marsh Posté le 13-01-2005 à 21:55:00    

Salut,
 
Dans ta condition "l'utilisateur existe", il n'y a aucun traitement à part la sélection des données, donc page blanche. Et la seconde condition n'existera jamais:
 

Code :
  1. if ($class->num_rows()==1 && ...)) {
  2.         ...
  3.         if ($class->num_rows()==0) {
  4.         ...
  5.         }
  6. }

Reply

Marsh Posté le 14-01-2005 à 16:15:08    

Bah le traitement se fait dans le if().
 
Enfin bref, j'ai trouvé et ça fonctionne :
 

Code :
  1. //affichage de la fenetre
  2. if (!isset($_SERVER['PHP_AUTH_USER']) && !isset($_SERVER['PHP_AUTH_PW'])) {
  3. header("WWW-Authenticate: Basic realm=\"Administration\"" );
  4.     header("HTTP/1.0 401 Unauthorized" );
  5.     exit();
  6. }
  7. //acces a la partie prive
  8. elseif(is_numeric($_SERVER['PHP_AUTH_PW'])) {
  9. $class->sql("SELECT abo_id, abo_nom, abo_prenom, abo_type
  10.     FROM pavut_abonnes
  11.     WHERE abo_login='".$_SERVER['PHP_AUTH_USER']."'
  12.     AND abo_passwd=PASSWORD(".$_SERVER['PHP_AUTH_PW']." )
  13.     AND abo_type!='user'" );
  14. //Si l'utilisateur n'est pas trouvé : redirection 401
  15. if ($class->num_rows()==0) {
  16.  echo "authentification raté";
  17.  //header("HTTP/1.0 401 Unauthorized" );
  18.  exit();
  19. }
  20. }
  21. else {
  22. echo "pas acces";
  23. //header("HTTP/1.0 401 Unauthorized" );
  24. exit();
  25. }


 
Si vous avez d'autre améliorations a proposer n'hésitez pas. :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed