Archivo de Etiquetas de 'usuarios'

Implementando la gestión de usuarios

Sin lugar a dudas, Dani ya os puso sobre la pista de nuestra idea de la gestión de usuarios en cuanto a Flatee. Y de qué manera era necesario tenerla. De tal forma que no voy a entrar en esto, sino más bien en cómo la estamos implementando.

Siguiendo el principio DRY, hemos utilizado el ya ampliamente conocido plugin restful_authentication. Desde hace algún tiempo este plugin se encuentra alojado en github, lo que ha servido para que algunos miembros del equipo trabajen con git, un añadido más.

Nuestra primera misión fue instalar git en nuestras máquinas para poder funcionar con él. En mi caso, ha sido bastante sencillo hay disponible una imagen para instalar en Mac OS X, por lo que la instalación ha sido un click detrás de otro, un simple reinicio del terminal y funcionando.

Luego para descargar el plugin desde github con git, nos basta con:

git clone git://github.com/technoweenie/restful-authentication.git vendor/plugins/restful-authentication

Por otro lado al descargar la versión de restful_authentication, dado que es la última sufrimos algunos problemas, que os queremos detallar.

Lo fundamentarl ahora es generar con el plugin nuestra cuenta de usuario:

./script/generate authenticated user sessions --include-activation --stateful --rspec

las opciones que incluimos detalladas nos dan:

  • include-activation: con esto se generará un ActionMailer que nos permitirá enviar el mail de activación a los usuairos implicados.

  • stateful: da soporte al plugin: acts_as_state_machine que generara el código de activación.

  • rspec: Genera test Rspec y Stories en lugar de los tradicionales test de rails.

Existen más posibilidades, sin embargo para nosotros estas eran las necesarias.

Tras ejecutar esto, el plugin nos recomienda una serie de pasos a seguir, el primero de ellos, debemos añadir un observer al config/environment.rb:

config.active_record.observers = :user_observer

Lo siguiente es instalar acts_as_state_machine, para ello:

svn export http://elitists.textdriven.com/svn/plugins/acts_as_state_machine/trunk vendor/plugins/acts_as_state_machine

Debemos añadir las siguientes rutas a config/routes.rb:

map.signup '/signup', :controller => 'users', :action => 'new'
map.login  '/login',  :controller => 'sessions', :action => 'new'
map.logout '/logout', :controller => 'sessions', :action => 'destroy'
map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate', :activation_code => nil

y modificar la existente creada por el plugin de usuarios:

map.resources :users, :member => { :suspend => :put, :unsuspend => :put, :purge => :delete }

Al modelo de usuario hay que añadirle los estados que va a utilizar el plugin acts_as_state_machine:

acts_as_state_machine :initial => :pending
state :passive
state :pending, :enter => :make_activation_code
state :active,  :enter => :do_activate
state :suspended
state :deleted, :enter => :do_delete

Como nota importante, decir que tuvimos que añadir unas líneas al init.rb del plugin, por unos errores que obteníamos de métodos ‘undefined’:

require File.dirname(FILE) + ‘/lib/authorization’
require File.dirname(FILE) + ‘/lib/authorization/stateful_roles’

Tras esto enviamos un mail al autor del plugin, por lo que consideramos es un error para que pudiese incluirlo en el repositorio y quedase corregido.

Registrar usuarios o no registrarlos

Una discusión que hemos tenido ha estado relacionado con el registro de usuarios. Por un lado pretendemos que flatee sea un servicio que llegue al máximo de gente posible, y por otro queremos que se gane calidad en los contactos entre las personas que ponen el anuncio y las que están buscando habitación, ya que se está eligiendo nada menos con quién compartir una vivienda durante una temporada.

Para llegar al máximo de gente posible, lo mejor sería no tener registro de usuarios, confirmar simplemente la dirección de email de quien anuncia y que los contactos se hagan fuera de flatee, por esto la calidad sería más complicado de mejorar. Además surge algún problema incómodo para el usuario, en todas las acciones administrativas hay que ir confirmando la dirección de email (actualizar, eliminar, históricos…).

El obligar a registrarse a todo el mundo significa poner también una barrera de entrada. Quien busca piso tiene muchos sitios parecidos para ver anuncios y elegir con cuáles quiere contactar; mientras que para quién pone el anuncio, es aceptable el registro por la idea de que a más visto sea su anuncio habrán más interesados y más posibilidades de que alguien coincida con el tipo de persona que se busca.

Finalmente nuestra conclusión ha sido hacer algo intermedio. Quien anuncia debe registrarse, pidiéndole lo necesario, y quien busca no está obligado a registrarse simplemente por ver anuncios. Eso no se aleja de cómo funcionan ya algunas webs de clasificados, el añadido más importante está en que cualquier usuario que se registre pueda detallar su perfil, que es lo que aumenta la calidad en los contactos, y poder ver cómo es una persona con la que se puede acabar conviviendo.

De cualquier forma, aunque la entrevista en persona habrá que hacerla siempre, de esta manera se puede conseguir un filtro importante y ahorrar largas caminatas o maratones de entrevistas .

Respecto al comentario que nos hizo RuGI en su momento, no creemos que un sistema de reputación basándonos en la información de otros lugares o propia aportase demasiado, al estar refiriéndonos a la personalidad o modo de vida de una persona, no es algo medible. De todas formas, está contemplado el que si una persona quiere, pueda reflejar sus actividades online y offline para dejarse conocer mejor.