Devise的匿名用户?

cjm*_*671 4 ruby-on-rails devise

如果我想建立一个带有rails(规范案例)的聊天室,可以选择匿名("挑选昵称")和授权(u/n&pw),我将如何用Devise构建它?

我成功地让Devise在后一种情况下工作,这是我正在努力的匿名部分(创建和维护会话).

Art*_*rov 8

实际上有一个Devise Wiki页面,只有他们称之为Guest用户:

如何:创建访客用户


Ana*_*oly 5

例如,使用额外的before_filter来设置匿名用户

def anonymous_sign_in
  return if user_signed_in?
  u = User.new(:type => 'anonymous')
  u.save(:validate => false)
  sign_in :user, u
end
Run Code Online (Sandbox Code Playgroud)


Kri*_*ris 5

另一种选择是不登录来宾用户,但在没有登录用户的情况下让 current_user 返回来宾用户。

在下面,如果用户未登录,current_user则将返回访客用户。因此,任何无需登录即可访问的控制器都不需要authenticate_user!before 过滤器。

def current_user                                                              
  super || guest_user                                                         
end                                                                           

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                                                         
  token = SecureRandom.base64(15)                                             
  user = User.new(:first_name => "anonymous", :last_name => 'user', :password => token, :email => "#{token@example.com}")
  user.save(:validate => false)                                               
  user                                                                        
end   
Run Code Online (Sandbox Code Playgroud)