I’m working on a site that will have a membership area that will
require login. I’m a sucker for caching, and all the solutions I’ve
seen so far disable the cache to get auth working. I haven’t dug in
deep into this idea yet, but I’m pondering the value of tweaking
ResponseCache to store something like an auth_required value in the
YML file and returning auth_required pages from the cache only if a
user is logged-in. That way logged-in users get the benefit of
cached pages.
Non-logged-in folks won’t get the cached page, so they’ll have the
page dynamically loaded and get caught by the ‘hey-you-log-in-first’
routine.
Are there any major reasons against the idea?
basically, it would look like this…
there will be a before_filter on SiteController to establish the
value of logged_in
def read_metadata(path, logged_in)
#added a parameter
path = clean(path)
name = “#{page_cache_path(path)}.yml”
if File.exists?(name) and not File.directory?(name)
content = File.open(name,“rb”) { |f| f.read }
metadata = YAML::load(content)
auth_required = metadata[‘auth_required’] #added
if(metadata[‘expires’] && metadata[‘expires’] >= Time.now && (!
auth_required || (auth_required && logged_in)) #updated
return metadata
end
end
end
def response_cached?(path, logged_in = false) #added a
parameter
!!read_metadata(path, logged_in)
#here too
end