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 6 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.

Faltaria poner el observer en el enviroment.rb

config.activerecord.observers = :userobserver

Alguien sabe como puedo hacer para configurar los mensajes de este plugin para que salgan en espa;ol? Me comentan que hay un plugin pero no lo encuentro.

Hola lo he probado y mas o menos funciona, pero me interesaria saber mas de lo de user_observer, ya que no se en que parte del archivo he de introducir el codigo, y quisiera que usuarios anonimos pudiera usar mi aplicacion aunque no se guardara nada en la base de datos

otra cosa, es que no he sido capaz de mandar correos en el alta de usuarios

gracias, sigo buscando y saludos

PD ¿debo crear un usuario obserbador sin clave ni nada, que se use por defecto al llegar a web? y si ese usuario anonimo se conecta mas de una vez, ¿puedo usar una cockie par mostrarle al aplicacion como la ultima vez que se conecto?

la ultima pregunta no es ahora mismo importante

Post a comment

Required fields in bold.






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