RESTful authentication con activación de usuarios
- Posted by Amaia on December 24, 2007 at 06:02 PM
- Comments: 2 (view/add your own)
- tags: plugins, rails, restfulauthentication
Esta mañana he estado pegándome con el plugin restful_authentication para que activase correctamente los usuarios. Por "suerte" Jaime estaba en las mismas y después de hablar un ratillo por jabber hemos conseguido que funcionase correctamente. Había que hacer un par de cosas que no están bien explicadas en la documentación del plugin y que hemos encontrado en los comentarios de la página del plugin en el directorio de plugins de agilewebdevelopment.com.
Dejo aquí apuntados los pasos para futura referencia.
Primero instalar el plugin:
$ script/plugin install http://svn.techno-weenie.net/projects/plugins/restful_authentication/
Crear los usuarios y las sesiones con activación de usuarios con el generador que trae el plugin:
$ script/generate authenticated user session —include-activation
$ rake db:migrate
Añadir las rutas necesarias en config/routes.rb, según el README del plugin:
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'
Y una que no viene en la doc pero que es necesaria para que funcionen los links de activación enviados por email.
map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate'
Configurar ActionMailer para que envíe correo.
Poner las urls correctas para nuestra aplicación en app/models/user_mailer.rb. En lugar de ponerlas a pelo, se puede definir HOST en environment.rb con:
HOST = "localhost:3000"
y luego en app/models/user_mailer.rb poner:
@body[:url] = "#{$HOST}/activate/#{user.activation_code}"
Por último, no queremos que el usuario quede logueado al registrarse, si no ¿qué sentido tiene la activación? Para esto hay que comentar la línea que dice self.current_user = @user después de @user.save! en el método create de users_controller.rb:
def create
cookies.delete :auth_token
@user = User.new(params[:user])
@user.save!
# ** No logueamos al usuario hasta que se haya validado **
# self.current_user = @user
redirect_back_or_default('/')
flash[:notice] = "Thanks for signing up! Follow the instructions mailed to you to activate your account."
rescue ActiveRecord::RecordInvalid
render :action => 'new'
end
Una vez hecho todo esto no olvidar reiniciar mongrel y poner en controllers/application.rb
include AuthenticatedSystem
y en los controladores a los que se quiera restringir el acceso
before_filter :login_required
En Railscasts hay un episodio muy chulo sobre este plugin, y aunque no cubre la parte de activación de usuarios, está bien para ver como va la cosa.