如果我想通過選擇匿名('選擇暱稱')和授權(u/n & pw)來構建帶軌道聊天室(規範情況),我將如何使用Devise構建這個聊天室?Devise的匿名用戶?
我已經成功地得到了Devise在後一種情況下的工作,這是匿名部分(創建&維持一個會話)我正在努力。
如果我想通過選擇匿名('選擇暱稱')和授權(u/n & pw)來構建帶軌道聊天室(規範情況),我將如何使用Devise構建這個聊天室?Devise的匿名用戶?
我已經成功地得到了Devise在後一種情況下的工作,這是匿名部分(創建&維持一個會話)我正在努力。
使用額外的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
#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
然後,您可以在記錄適合時刪除該記錄。
實際上沒有爲一個設計Wiki頁面,只有他們稱之爲Guest用戶:
另一種選擇不是登錄訪客用戶,而是在沒有登錄用戶的情況下讓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
你如何保證這被稱爲後設計sign_in方法? – Bryan