2011-07-18 66 views
4

如果我想通過選擇匿名('選擇暱稱')和授權(u/n & pw)來構建帶軌道聊天室(規範情況),我將如何使用Devise構建這個聊天室?Devise的匿名用戶?

我已經成功地得到了Devise在後一種情況下的工作,這是匿名部分(創建&維持一個會話)我正在努力。

回答

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 
+1

你如何保證這被稱爲後設計sign_in方法? – Bryan

1
#user.rb 
    # Creates an anonymous user. An anonymous user is basically an auto-generated 
    # +User+ account that is created for the customer behind the scenes and its 
    # completely transparently to the customer. 
    def anonymous!(nickname) 
     temp_token = SecureRandom.base64(15).tr('+/=', 'xyz') 
     usr = ::User.new(email: "#{temp_token}@example.net", password: temp_token, password_confirmation: temp_token, nickname: nickname) 
     usr.save!(validate: false) 
     usr 
    end 

然後,您可以在記錄適合時刪除該記錄。

4

另一種選擇不是登錄訪客用戶,而是在沒有登錄用戶的情況下讓current_user返回訪客用戶。

在下面如果用戶未登錄,則current_user將返回訪客用戶。因此,任何無需登錄即可訪問的控制器在過濾之前不需要authenticate_user!

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 => "#{[email protected]}") 
    user.save(:validate => false)            
    user                   
end