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.

Hierarchy: previous, next

Comments

There are 4 comments on this post. Post yours →

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

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

Post a comment

Required fields in bold.






Markdown syntax enabled (no html). See the syntax rules for help.