如何在Rails 3 + Devise中创建访客用户

时间:2011-06-17 21:10:14

标签: ruby-on-rails ruby-on-rails-3 devise

目前我有一个带有设计的rails 3应用程序。它要求用户注册/登录访问。

我想启用访客用户。因此,当用户访问某些视图时,会为该用户创建一个访客用户帐户,然后在他们验证/注册该访客用户时,/然后将其升级为普通用户。

将应用视为聊天室。我希望访客用户能够加入聊天室,然后将oauth加入twitter进行注册。但我不想强迫用户在加入之前注册。

建议?

我发现了这个:https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user

问题是我添加了助手,但不了解如何启动current_or_guest_user。还不确定如何启动每个特定的允许视图?

有什么想法吗?指针?感谢

3 个答案:

答案 0 :(得分:14)

另一种更透明的方式是:

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

答案 1 :(得分:3)

关注维基后,只需将current_user的来电替换为current_or_guest_user

即可

就视图而言,使用before_filter在控制器中执行此操作。

没有看到你的任何代码很难猜测,但在伪代码中它会像

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 

答案 2 :(得分:2)

结帐this rails cast有关访客用户的信息。关于Devise的详细信息大约在5:40。