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.
Latest Comments
RSS