On Tuesday 08 Oct 2002 10:48 pm, Craeg K Strong wrote:
Hello:
I would like to log the identity of the authenticated user for *every* URL traversal within my Zope Product.
For example, let's say that my forms-based web application contains 50 screens. They are all protected such that only authenticated users can view them. Any one of them could be bookmarked, so a user could "jump in" at any point.
I want to record the fact that a user visited a screen, each and every time they do so.
A natural place to do this would be in a pre-traversal hook, but I seem to be stymied by the lack of authentication information in __bobo_traverse__ or __before_publishing_traverse__
Can anyone think of a way this could be done?
It cant be done *inside* either of these methods because authentication is not performed until after traversal has been completed. I guess it would be useful for you to have access to other information, such as the response code and body length, that are only available once the request has been fully processed. I have a product which does a similar job. The cleanest implementation I could find was use one of the methods you suggest to call the REQUEST._hold method. This gets the request object to hold on to the object you provide, and delete its reference when the request is finished. Your object can provide a __del__ method that performs the real work. Thats nasty, but it works. I would be interested if you could find anything nicer.