Autenticación de Usuarios en Controladores Rails
Clase 23 de 33 • Curso de Creación de APIs con Ruby on Rails
Resumen
¿Cómo autenticar a un usuario en Ruby on Rails?
En la creación de aplicaciones fluye la necesidad de restringir ciertas acciones a usuarios autenticados, garantizando seguridad y personalización en el acceso a la información. Ruby on Rails ofrece herramientas robustas para implementar autenticación y autorización. Exploramos cómo hacer esto en el contexto de un controlador que gestiona las acciones de crear y actualizar publicaciones.
¿Qué es el Before Action en Rails y cómo se utiliza?
El before_action
es una herramienta que proporciona Rails para ejecutar una función específica antes de ciertas acciones de un controlador. Este aspecto es crucial para asegurar que procedimientos como la creación y actualización de publicaciones solo se realicen si el usuario está autenticado.
before_action :authenticate_user!, only: [:create, :update]
En este fragmento, el método authenticate_user!
se ejecutará antes de las acciones create
y update
.
¿Cómo implementar el método authenticate_user!?
Este método es el núcleo de la autenticación. Su implementación se realiza como un método privado en el controlador. La autenticación se basa en el uso del header de autorización del request, verificando que el formato y el token presente en él sean válidos.
-
Leer el Header de Autenticación: Verifica su presencia y que cumpla con el formato esperado, utilizando una expresión regular.
if request.headers['Authorization'] =~ /Bearer (.+)/ token = $1 else render json: { error: 'Unauthorized' }, status: :unauthorized return end
-
Verificar el Token: A través del modelo
User
, verifica que el token corresponde a un usuario válido.user = User.find_by(auth_token: token)
-
Manejo de Usuario: Si el usuario es encontrado, es asignado como usuario actual, accesible en el contexto de la aplicación.
if user Current.user = user else render json: { error: 'Unauthorized' }, status: :unauthorized end
¿Cómo se gestiona el usuario actual con Current Attributes?
Rails 5 introduce Current Attributes
, una herramienta para guardar y acceder al contexto de la aplicación en la sesión actual. Implementar esto implica:
- Definir una clase
Current
, dentro de la carpeta de modelos, que hereda deActiveSupport::CurrentAttributes
.
class Current < ActiveSupport::CurrentAttributes
attribute :user
end
- Asignar el usuario identificado al atributo correspondiente.
Current.user = user
Esta configuración permite que cualquier parte de la aplicación pueda referirse al usuario actual mediante Current.user
, simplificando el acceso a información contextual.
¿Por qué usar current_user en lugar de session o cookies?
Utilizar Current
ofrece una ventaja significativa: aislamiento de contexto. Permite un manejo más limpio y menos propenso a errores comparado con sesiones o cookies, en especial en aplicaciones que emplean múltiples hilos o procesos. Esta técnica resulta en código más mantenible y seguro, apoyando la integración fluida de la autenticación en aplicaciones Rails.
Al incorporar un flujo de autenticación robusto y mantener el estado del usuario con clases como Current
, no solo límite de acceso a funciones específicas, sino que ofrece un sistema escalable que permite a los desarrolladores centrarse en expandir otras funcionalidades de la aplicación, sabiendo que la seguridad está bien gestionada. Si te interesa seguir profundizando en Ruby on Rails y sus herramientas, la práctica constante te hará dominar más allá de los conceptos básicos. ¡Sigue programando!