我對Raven
沒有太多的想法,但是下面是一種方法,使用它我們在請求中訪問當前用戶,遍及我們的應用程序。
我們已經創建了一個類,其作爲高速緩衝存儲器,和插入/從當前線程
class CustomCache
def self.namespace
"my_application"
end
def self.get(res)
Thread.current[self.namespace] ||= {}
val = Thread.current[self.namespace][res]
if val.nil? and block_given?
val = yield
self.set(res, val) unless val.nil?
end
return val
end
def self.set(key, value)
Thread.current[self.namespace][key] = value
end
def self.reset
Thread.current[self.namespace] = {}
end
end
然後,在接收到請求時,執行用於當前會話的檢查檢索數據,然後用戶的模型插入緩存如下
def current_user
if defined?(@current_user)
return @current_user
end
@current_user = current_user_session && current_user_session.record
CustomCache.set(:current_user, @current_user)
return @current_user
end
現在,你可以從任何地方當前用戶在應用程序中,使用下面的代碼,
CustomCache.get(:current_user)
我們還確保前後請求已送達後到緩存重置,所以我們這樣做,
CustomCache.reset
希望這有助於。
這似乎很有趣。我想知道Devise是否有一個我可以在中間件中使用的current_user方法。 – rohitmishra