No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Clase user

21/35
Recursos

¿Cómo implementar una tabla de usuarios en una aplicación?

Los conceptos básicos son esenciales en el desarrollo web, pero nada se compara con llevarlos a la práctica. En esta guía, exploraremos cómo implementar una tabla de usuarios en tu aplicación, garantizando un flujo seguro y eficiente para la autenticación. ¡Vamos a ello!

¿Qué debe incluir una tabla de usuarios?

Para comenzar, es crucial establecer qué elementos son necesarios en tu tabla de usuarios. Aquí una lista con los atributos clave:

  • userID: Un identificador único y numérico para cada usuario, que puede ser auto incrementable.
  • username: un VARCHAR con un límite de caracteres, generalmente 100, asegurando que sea único.
  • password: Aunque inicialmente puede ser un VARCHAR, es ideal almacenarlo ofuscado por seguridad.
  • auth key y access token: Usados para distintas formas de autenticación, especialmente en APIs.
  • created_at y modified_at: Para mantener un registro de creación y actualización de los usuarios.

Este set de atributos básicos sentará las bases para un autentificación eficiente en tu aplicación.

¿Cómo construir la tabla de usuarios?

Una vez claro qué debe incluir nuestra tabla, pasemos a la construcción en la base de datos:

CREATE TABLE IF NOT EXISTS users (
  userID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(100) UNIQUE NOT NULL,
  password VARCHAR(500) NOT NULL,
  auth_key VARCHAR(200),
  access_token VARCHAR(200),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

¿Cómo conectar nuestra aplicación con la base de datos?

Con nuestra tabla lista, integramos la lógica de negocio en nuestra aplicación. Aquí resumimos los pasos esenciales:

  1. Acceso a la base de datos: Asegúrate de tener un modelo de usuario que extienda de ActiveRecord.

  2. Validación de usuarios: Implementa métodos para validar la información del usuario.

    public static function findIdentity($id)
    {
        return self::findOne(['userID' => $id]);
    }
    
  3. Registro y autenticación: Ahora, ajustamos las funciones para operar sobre la base de datos en lugar de listas estáticas.

    public static function findByUsername($username)
    {
        return self::findOne(['username' => $username]);
    }
    
    public function validatePassword($password)
    {
        return $this->password === md5($password . $this->username . $_ENV['SALT']);
    }
    

¿Cómo asegurar las contraseñas de los usuarios?

Uno de los aspectos críticos es gestionar las contraseñas de forma segura. La práctica común y segura es ofuscar las contraseñas antes de almacenarlas.

  1. Ofuscación de contraseñas: Vamos a implementar una función para asegurar mayor seguridad.

    public function ofuscatePassword($password)
    {
        return md5(sprintf('%s.%s.%s', $password, $this->username, getenv('SALT')));
    }
    
  2. Almacenamiento seguro: Utiliza esta función cada vez que registres o actualices una contraseña.

    $this->password = $this->ofuscatePassword($inputPassword);
    

Con estos pasos, garantizamos que las contraseñas almacenadas en la base de datos no estén en texto plano.

Reflexiones finales

Llevar a cabo una implementación práctica no solo solidifica nuestro entendimiento teórico, sino que también mejora nuestras habilidades como desarrolladores. Cada detalle, desde el diseño de la tabla hasta la seguridad de las contraseñas, juega un rol vital. Así que sigue practicando y mejorando; la perfección se logra con cada línea de código. ¡El mundo del desarrollo web te espera!

Aportes 3

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

create table if not exists users ( user\_id integer unsigned primary key auto\_increment, username varchar(100) not null unique, password varchar(500) not null, auth\_key varchar(200), access\_token varchar(200), created\_at timestamp not null default current\_timestamp, modified\_at timestamp not null default current\_timestamp on update current\_timestamp ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4\_bin;
No entiendo porque la tabla users aparece sin atributos, si se supone que en las primeras clases llenamos esa información 🤷‍♀️
![](https://static.platzi.com/media/user_upload/image-2c1c7bf6-740b-4dc0-a90f-eedaea5e0db9.jpg)