У меня нет большой идеи о 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