Autenticación de usuarios con restful_authentication

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.

Comentarios

Hola, estoy usando el plugin Restful_authentication y en mi proyecto se produce la excepción ActionController::InvalidAuthenticityToken en el método 'create' del controlador 'Sessions', cuando en el momento de hacer login, borro todas las cookies ("limpiar información privada" en firefox) y a continuación le doy al submit.

¿Te ocurre también esto? Me gustarí­a saber si el error se debe a mi código o al plugin...

Un saludo.

Hola Sergio

Te acabo de contestar en la lista de ror-es con lo que yo creo que hace que te salte ese error. [http://www.ruby-forum.com/topic/149029](http://www.ruby-forum.com/topic/149029)

saludos

Gracias por el link ;) Seguiré investigando.

Hola, que tal? veo que este post tiene mucho tiempo, pero ahi va mi pregunta.

Quiero que cualquier usuario pueda usar casi toda mi web, pero solo si estas autenticado se guarden tus operaciones para cuando vuelvas a entrar en la aplicacion,¿no deberia haber ningun problema con este plugin?,

otra cosa, no he instalado todavia ningun plugin a mi aplicacion, si por lo que sea no me mola algo, ¿puedo dejar mi aplicacion en un estado anterior a la instalacion del plugin?

gracias y un saludo

Hola

El plugin restful_authentication ya está un poco obsoleto, y una de las pegas que tiene es que genera mucho código. Desde hace tiempo yo vengo usando [authlogic](http://github.com/binarylogic/authlogic) que es más limpio. Si buscas en google hay varios tutoriales. También hay una [Railscast sobre Authlogic](http://railscasts.com/episodes/160-authlogic).

Hay más opciones como [clearance](http://robots.thoughtbot.com/post/159805955/clearance-rails-authenticati...) y otros, por si te gustan más.

Añadir nuevo comentario