Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

problema con logeo de contraseña y usuario

Estas en el tema de problema con logeo de contraseña y usuario en el foro de Frameworks y PHP orientado a objetos en Foros del Web. hola que estoy haciendo un logeo en una aplicacion con nombre y contraseña. la contraseña la encripto con sha1 y en el script de login.php ...
  #1 (permalink)  
Antiguo 13/12/2011, 11:48
 
Fecha de Ingreso: mayo-2009
Ubicación: Andalucia
Mensajes: 650
Antigüedad: 14 años, 11 meses
Puntos: 1
problema con logeo de contraseña y usuario

hola

que estoy haciendo un logeo en una aplicacion con nombre y contraseña. la contraseña la encripto con sha1 y en el script de login.php meto los usuarios con su contraseña que he creado pero me dice . me da el error usuario/contraseña no coinciden. es por que tengo que poner algun codigo extra por lo del "sha1" de encriptacion? os dejo el codigo.

necesito ayuda :P

login.php:

Código PHP:
<?php
require_once("../../includes/initialize.php");
if(
$sesion->esta_logueado())
{
    
redireccionar_a("admin.php");
}
?>
<?php
if(isset($_POST["submit"]))
{
    
$username $_POST["username"];
    
$password $_POST["password"];
    
    
$usuarioUsuario::autenticar($username,$password);
    
    

    if(
$usuario)
    {
        global 
$sesion;
        
$sesion->loguearse($usuario);
        
grabar_acciones("logueo""el usuario ".$usuario->id " se ha logueado.");
        
redireccionar_a("admin.php");
    }
    else
    {
        
$mensaje "usuario/clave no coinciden.";
        
    }
}
?>
<?php 
include("admin_header.php"); ?>
 <table id="estructura">
    <tr>
      <td id="menu">
      
      </td>
      <td id="pagina">
          <h2>Administración</h2>
   <p>    <?php echo isset($mensaje) ? $mensaje "" ?> </p>
        <form action="login.php" method="post">
        <table>
            <tr>
                <td>Nombre de usuario:</td>
                <td><input type="text" name="username" /></td>
            </tr>
            <tr>
                <td>Contraseña:</td>
                <td><input type="password" name="password" /></td>
            </tr>
        </table>
        <input type="submit" value="Ingresar" name="submit"/>
        </form>
     </td>
    </tr>
  </table>
 
<?php include("admin_footer.php"); ?>
session.php

Código PHP:
<?php

class Sesion
{
    public 
$id;
    public 
$usuario;
    private 
$logueado false;
    
    function 
__construct()
    {
        
session_start();
        
$this->verificar_logueo();
    }
    
    public function 
esta_logueado()
    {
        
        return 
$this->logueado;
        
    }
    
    public function 
loguearse($usuario)
    {
        if(
$id)
        {
            
$this->id $_SESSION["id"] = $usuario->id;
            
$this->usuario $_SESSION["usuario"] = $usuario->usuario;
            
$this->logueado true;
        }
    }
    
    public function 
desloguearse()
    {
        unset(
$this->id);
        unset(
$_SESSION["id"]);
        
$this->logueado false;
        
    }
    private function 
verificar_logueo()
    {
        if(isset(
$_SESSION["id"]))
        {
            
$this->id =  $_SESSION["id"];
            
$this->usuario $_SESSION["usuario"];
            
$this->logueado true;
        }
        else
        {
            unset(
$this->id);
            
$this->logueado false;
        }
    }
}

$sesion = new Sesion();
?>
  #2 (permalink)  
Antiguo 13/12/2011, 11:49
 
Fecha de Ingreso: mayo-2009
Ubicación: Andalucia
Mensajes: 650
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: problema con logeo de contraseña y usuario

Para crear el usuario:

create.php

Código PHP:
<?php require("../../includes/session.php");?>
<?php 
//verificar_sesion(); ?>

<?php require_once("../../includes/initialize.php"); ?>


<?php
    
if(isset($_POST["username"]))
    {
        
$errores = array();
        
$errores array_merge($erroresvalidar_campos_obligatorios(array("username","password")));
        
$max_caracteres = array("username" => 50,"password" => 40);
        foreach(
$max_caracteres as $campo => $max)
        {
            if(
strlen($_POST[$campo])>$max)
            {
                
$errores[] = $campo;    
            }            
        }
        
        
$username =trim(preparar_consulta($_POST["username"]));
        
$password sha1(trim(preparar_consulta($_POST["password"])));
        
//$nombre = trim(preparar_consulta($_POST["nombre"]));
//        $apellido = trim(preparar_consulta($_POST["apellido"]));
        
        
if(empty($errores))
        {
            
$consulta "INSERT INTO usuarios (
                            username, password) VALUES (
                            '{$username}','{$password}')"
;
            
$resultado mysql_query($consulta);
            if(
$resultado)
            {
                
$mensaje "El usuario ha sido creado.";
            }
            else
            {
                
$mensaje "No se ha podido crear el usuario: " mysql_error();
            }
        }
        else
        {
            
$mensaje "Se han encontrado " count($errores) . " errores";
        }
    }
?>
<?php 
include("admin_header.php"); ?>
  <table id="estructura">
    <tr>
      <td id="menu">
      <a href="admin.php">Regresar al menú principal</a>
      </td>
      <td id="pagina">
          <h2>Crear nuevo usuario</h2>
        <?php if(isset($mensaje)) { echo "<p>" $mensaje "</p>"; } ?>
        <form action="create.php" method="post">
        <table>
            <tr>
                <td>Nombre de usuario:</td>
                <td><input type="text" name="username" /></td>
            </tr>
            <tr>
                <td>Contraseña:</td>
                <td><input type="password" name="password" /></td>
            </tr>           
        </table>
        <input type="submit" value="Crear usuario" />
        </form>
     </td>
    </tr>
  </table>
<?php require_once("admin_footer.php"); ?>
user.php

Código PHP:
<?php
require_once(LIB_DIR.SD."database.php");

class 
Usuario
{
    public 
$id;
    public 
$username;
    public 
$password;
    
    


    function 
validar_campos_obligatorios($campos_obligatorios)
    {
        
$errores = array();
        foreach(
$campos_obligatorios as $campo)
        {            
            if(!isset(
$_POST[$campo]) || (empty($_POST[$campo]) && !is_numeric($_POST[$campo])))
            {
                
$errores[] = $campo;
            }    
        }
        return 
$errores;
    }
    
    public static function 
buscar_por_id($id)
    {
        global 
$bd;
        
$matriz_usuarios self::buscar_por_sql("SELECT * FROM    usuarios WHERE id={$id}");
        return (!empty(
$matriz_usuarios))? array_shift($matriz_usuarios) : false;
    }
    
    
    public static function 
buscar_todos()
    {
        return 
self::buscar_por_sql(" SELECT * FROM    usuarios");
        
    
        
    }
    
    public static function 
buscar_por_sql($sql)
    {
        global 
$bd;
        
$resultado $bd->enviar_consulta($sql);
        
$matriz_usuarios = array();
        while(
$registro $bd->fetch_array($resultado))
        {
            
array_push($matriz_usuarios,Usuario::instanciar($registro));
        }
        return 
$matriz_usuarios;
    }
    
    public static function 
instanciar($registro)
    {
        
$usuario = new Usuario();
    
        foreach (
$registro as $propiedad => $valor)
        {
            if (
$usuario->propiedad_existe($propiedad))
            {
                
$usuario->$propiedad $valor;
            }
        }
        return 
$usuario;
    }
    
    public function 
nombre_completo()
    {
        if(isset(
$this->nombre) && isset($this->apellido))
        {
            return 
$this->nombre " " $this->apellido;
        }
        else
        {
            return 
"";
        }
    }
    
    
    public function 
propiedad_existe($propiedad)
    {
        
$propiedades get_object_vars($this);
        return 
array_key_exists($propiedad$propiedades);
    }
    
    public static function 
autenticar($username ""$password"")
    {
        global 
$bd;
        
$username $bd->preparar_consulta($username);
        
$password $bd->preparar_consulta($password);
        
        
$sql "SELECT * FROM usuarios ";
        
$sql .= " WHERE username='{$username}' ";
        
$sql .=" AND password='{$password}' ";
        
$sql .=" LIMIT 1";
        
        
$matriz_usuarios Usuario::buscar_por_sql($sql);
        return  (!empty(
$matriz_usuarios)) ? array_shift($matriz_usuarios) : false ;
    }
    
}
    

?>
  #3 (permalink)  
Antiguo 13/12/2011, 12:01
 
Fecha de Ingreso: mayo-2009
Ubicación: Andalucia
Mensajes: 650
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: problema con logeo de contraseña y usuario

estara el problema en session.php

en la funcion

Código PHP:
    private function verificar_logueo()
    {
        if(isset(
$_SESSION["id"]))
        {
            
$this->id =  $_SESSION["id"];
            
$this->username $_SESSION["username"];
            
$this->logueado true;
        }
        else
        {
            unset(
$this->id);
            
$this->logueado false;
        }
    } 
nota: he cambiado las variables $_SESSION usuario a username
  #4 (permalink)  
Antiguo 13/12/2011, 12:04
 
Fecha de Ingreso: mayo-2009
Ubicación: Andalucia
Mensajes: 650
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: problema con logeo de contraseña y usuario

o el fallo esta en la encriptacion sha1 que en login.php tengo que poner algun codigo para descifrar la contraseña?
  #5 (permalink)  
Antiguo 13/12/2011, 14:04
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 12 años, 11 meses
Puntos: 261
Respuesta: problema con logeo de contraseña y usuario

Lo he mirado así un poco rápido. Al guardar la pass lo guardas mediante
Código PHP:
$password sha1(trim(preparar_consulta($_POST["password"]) 
Y al realizar la comparación, estás comparando la pass que viene por POST (sin sha1), con la que está guardada en la DB que la has guardado con sha1.
Código PHP:
//archivo login
$username $_POST["username"]; 
$password $_POST["password"]; 
     
$usuarioUsuario::autenticar($username,$password); 
En alguna parte de aquí debes igualar el proceso de hasheado antes de pasarlo a la consulta para que compare las dos contraseñas exactamente iguales.
Código PHP:
//class Usuario
    
public static function autenticar($username ""$password""
    { 
        global 
$bd
        
$username $bd->preparar_consulta($username); 
        
$password $bd->preparar_consulta($password); 
         
        
$sql "SELECT * FROM usuarios "
        
$sql .= " WHERE username='{$username}' "
        
$sql .=" AND password='{$password}' "
        
$sql .=" LIMIT 1"
         
        
$matriz_usuarios Usuario::buscar_por_sql($sql); 
        return  (!empty(
$matriz_usuarios)) ? array_shift($matriz_usuarios) : false 
    } 
Prueba y nos cuentas,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #6 (permalink)  
Antiguo 13/12/2011, 19:39
Avatar de SetheR  
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 15 años, 3 meses
Puntos: 44
Respuesta: problema con logeo de contraseña y usuario

Yo un fallo que veo así mirando por encima está aquí.

Código PHP:
public function loguearse($usuario
    { 
        if(
$id
        { 
            
$this->id $_SESSION["id"] = $usuario->id
            
$this->usuario $_SESSION["usuario"] = $usuario->usuario
            
$this->logueado true
        } 
    } 
donde $id no existe,con lo cual el método no hace nada
  #7 (permalink)  
Antiguo 15/12/2011, 01:25
 
Fecha de Ingreso: mayo-2009
Ubicación: Andalucia
Mensajes: 650
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: problema con logeo de contraseña y usuario

creo que lo e solucionado. (creo). estos son los cambios que le he hecho al codigo con los consejos que me habeis dado:

login.php

Código PHP:
$username $_POST["username"];
//en la linea de abajo e metido sha1()
$password sha1($_POST["password"]);    
    
$usuarioUsuario::autenticar($username,$password); 
session.php

Código PHP:
public function loguearse($username)
    {
        if(
$id)
        {
            
// esta es la linea que he modificado poniendo $id  $this->id = $_SESSION["id"] = $id->id;
            
$this->usuario $_SESSION["username"] = $usuario->username;
            
$this->logueado true;
        }
    } 

Etiquetas: contraseña, logeo, php, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:13.