Pasos para crear una aplicación rails con autenticación de usuarios.
Crear la aplicación rails:
$ rails myapp
$ cd myapp
Instalar el plugin restful_authentication:
$ script/plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication/
Generar el sistema de autenticación:
$ script/generate authenticated user session
$ rake db:migrate
En config/routes.rb
añadir lo siguiente antes de las rutas por defecto (las dos últimas)
map.resources :users
map.resource :session, :controller => 'session'
map.signup '/signup', :controller => 'users', :action => 'new'
map.login '/login', :controller => 'session', :action => 'new'
map.logout '/logout', :controller => 'session', :action => 'destroy'
En app/controllers/application_controller.rb
poner la línea siguiente, que viene en los controladores user_controller.rb
y session_controller.rb
que ha creado el plugin.
include AuthenticatedSystem
Poniendolo en application_controller.rb
hacemos que la autenticación esté disponible para todos los controladores.
Ahora en los controladores para los que queramos restringir el acceso a usuarios autenticados tendremos que poner un filtro:
before_filter :login_required
A este filtro le podemos poner parámetros para indicarle que sólo se aplique a algunas acciones o que se aplique a todas excepto a algunas, por ejemplo:
before_filter :login_required, :only => [:create, :destroy]
before_filter :login_required, :except => [:index, :show]
En mi caso últimamente es habitual que necesite controlar el acceso a toda la aplicación salvo a unas pocas acciones por lo que pongo el before_filter
en application_controller.rb
y luego pongo un skip_before_filter
donde sea necesario, que en este caso es en users_controller.rb
y session_controller.rb
para permitir crear nuevos usuarios y hacer login, que en realidad es crear una nueva session. Por tanto en estos dos controladores pongo:
skip_before_filter :login_required, :only => [:new, :create]
Si además hay una portada de la aplicación pública también habrá que aplicarle esto.
Para hacer que el registro sea con activación de usuarios por email, ver este otro post.