0

crear login con ruby on rails



crear login con ruby on rails

crear login con ruby on rails . En nuestras aplicaciones web casi siempre vamos a tener que registrar usuarios, de esta forma tendremos miembros de nuestras tiendas, blogs, comunidades virtuales, sistemas administrativos, etc. Para que el registro sea efectivo y útil, luego estos usuarios deben ser capaces de autenticarse para poder ingresar a partes que hayan sido creadas para usuarios registrados, como ver su perfil, administrar sus mensajes, realizar compras, escribir artículos, etc.

Ingresando a la aplicación log-in

El log-in es la parte vital de nuestra aplicación, nos permite separar lo privado de lo público, nos permite saber qué perfil tiene cada usuario que ingresa y con ello decidir que puede ver o no.

Para que nuestra aplicación tenga esta funcionalidad, necesitamos una acción en el controlador que nos permita autenticar al usuario comparando su usuario y contraseña contra lo que tenemos en base de datos, luego una vez que pase esto debemos guardar en la sesión algunos valores que nos permita saber en todo momento quien está logueado y que perfil y permisos tiene, claro esto último depende mucho del diseño de nuestra aplicación.

Ya a estas alturas debemos saber generar un controlador y todo lo relacionado con la consola de rails, por lo que veremos directamente el controlador y su contenido, así como también veremos la lógica detrás del mismo:

  1. def login
  2. if request.get?
  3. session[:user_id] = nil
  4. @user = User.new
  5. else
  6. @user = User.new(params[:user])
  7. logged_in_user = @user.try_to_login
  8. if logged_in_user
  9. session[:user_id] = logged_in_user.id
  10. redirect_to(:action => «index»)
  11. else
  12. flash[:notice] = «Invalid user/password combination»
  13. end
  14. end
  15. end

En la primera parte con el condicional IF de nuestro controlador preguntamos por el request, si es GET limpiamos la sesión y creamos un nuevo objeto de tipo usuario, de esta forma preparamos el camino para ingresar. De no ser GET el request asumimos que es POST, entonces a nuestro objeto le pasamos los parámetros del formulario y luego llamamos al método try_to_login, este método lo que hace es hacer las comparaciones de nombre de usuario y contraseña contra lo que tenemos en base de datos.

Por último con otro condicional vemos si el usuario efectivamente fue logueado, asignamos valores al sesión y luego redirigimos el usuario al index, de lo contrario mostramos un error con un mensaje.

El modelo

Como vimos en el controlador llamamos algunos métodos que nos permiten hacer las comparaciones correspondientes, ahora lo que necesitamos es crear dichos métodos y para ello vamos a hacerlo en el modelo, veamos que contiene y el por qué lo contiene:

  1. def self.login(name, password)
  2. hashed_password = hash_password(password || «»)
  3. find(:first,
  4. :conditions => [«name = ? and hashed_password = ?»,
  5. name, hashed_password])
  6. end
  7. def try_to_login
  8. User.login(self.name, self.password)
  9. end

El método login es simple, recibe dos parámetros: nombre y contraseña, luego consulta contra la base de datos por estos valores.

El método try_to_login, lo que hace es invocar al método login, de esta forma podemos darle una respuesta al usuario si existe o no en nuestra base de datos.

Por último creamos nuestra vista y las acciones que utilizará, en el archivo app/views/login crearemos nuestro login.rhtml y también nuestro index.rhtml, el primero es bastante similar a la construcción del usuario y este segundo lo veremos ahora.

  1. <% @page_title = «Administer your Store» %>
  2. <h1>Depot Store Status</h1>
  3. <p>
  4. Total orders in system: <%= @total_orders %>
  5. </p>
  6. <p>
  7. Orders pending shipping: <%= @pending_orders %>
  8. </p>
  9.  

Como vemos es bastante sencillo simplemente mostrará las ordenes pendientes del usuario, para ello en el controlador debemos incorporar las acciones necesarias:

  1. def index
  2. @total_orders = Order.count
  3. @pending_orders = Order.count_pending
  4. end






comparte con tus amigos

codigo fuente

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *