2011-06-17 18 views
8

Actualmente tengo una aplicación de rails 3 con dispositivo. requiere que los usuarios se registren/inicien sesión para acceder.cómo crear un usuario invitado en Rails 3 + Devise

Me gustaría habilitar a los usuarios invitados. De modo que cuando un usuario visita ciertas vistas, se crea una cuenta de usuario invitado para ese usuario y luego si/cuando se autentica/registra ese usuario invitado se actualiza a un usuario normal.

Piense en la aplicación como una sala de chat. Quiero que los usuarios invitados puedan unirse a la sala de chat y luego oauth en Twitter para registrarse. Pero no quiero obligar a los usuarios a registrarse antes de unirse.

Sugerencias?

encontré esto: https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user

problema con esto es que he añadido el ayudante, pero no entienden cómo iniciar current_or_guest_user. ¿También no está seguro de cómo iniciar por vistas permitidas específicas?

¿Alguna idea? ¿Punteros? Gracias

+0

Si agrego los métodos en el enlace a mi ApplicationHelper y luego llamo al controlador 'user = current_or_guest_user' cuando falla con: variable local indefinida o método 'current_or_guest_user 'para – AnApprentice

+0

También intenté agregar' include ActionView: : Helpers :: ApplicationHelper 'en el controlador pero ahora obtengo: constante no inicializada ActionView :: Helpers :: ApplicationHelper – AnApprentice

+1

No se preocupe por incluir sus ayudantes, estos se incluyen automágicamente siempre que los coloque en el lugar correcto. ¿Recibes un mensaje de error específico? ¿Puedes ponerlo en un pastebin? – colinross

Respuesta

14

Otra forma más transparente es la siguiente:

def current_user 
    super || guest_user 
end 

private 

def guest_user 
User.find(session[:guest_user_id].nil? ? session[:guest_user_id] = create_guest_user.id : session[:guest_user_id]) 
end 

def create_guest_user 
    u = User.create(:name => "guest", :email => "guest_#{Time.now.to_i}#{rand(99)}@example.com") 
    u.save(:validate => false) 
    u 
end 
+0

enfoque realmente agradable. Ahora estoy haciendo lo mismo, pero opté por agregar un "is_guest" a mi modelo de usuario para poder ver de vez en cuando la base de datos y desviar a los usuarios invitados. – Automatico

+0

Buena sugerencia sobre cómo agregar un booleano 'is_guest' para que pueda barrer a los usuarios invitados antiguos periódicamente. – Kris

3

Después de seguir el wiki, basta con sustituir las llamadas a current_user con current_or_guest_user

En lo que va vistas, lo hacen en el controlador con un before_filter.

sin ver ningún código de usted que es difícil de adivinar, pero en pseudo-código que sería algo así como

class ChatController < ApplicationController 
before_filter authenticate_user!, :except => [:join] #this will force users to log in except for the join action 

    def join 
    chat_handle = current_or_guest_user.handle 
    # some more code... 
    end 
+0

Gracias Colin, por favor mira los comentarios de arriba. – AnApprentice

2

Pedido this rails cast acerca usuarios invitados. Detalles acerca de Devise alrededor de las 5:40.

Cuestiones relacionadas