RESTful authentication con activación de usuarios

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.

Hierarchy: previous, next

Comments

There are 2 comments on this post. Post yours →

Muy bueno el tutorial, después de parir con este plugin por fin lo pude utilizar :)

Like It's said, thanks you for keep it as simple as posible. Excellent tutorial.

Post a comment

Required fields in bold.






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