Another pattern you can use is to put all the authenitcation related routes into your app.pm, and put all the routes which require authentication into a different module (eg secure.pm). For secure.pm you have "before" defined to to do your auth check. I end up with something like: load_app 'secure'; before \&detect; # No secure behavior here get '/' => sub { redirect '/menu'; }; and then over in secure.pm: before \&secure_and_detect; get '/menu' => sub { template 'mainmenu'; }; For completeness, here are the subs for detect() and secure_and_detect() sub detect { my $b = HTTP::BrowserDetect->new( request->user_agent ); if ( $b->iphone ) { var mylayout => 'iphone'; } elsif ( $b->android ) { var mylayout => 'android'; } elsif ( $b->blackberry ) { var mylayout => 'blackberry'; } elsif ( $b->ipad ) { var mylayout => 'ipad'; } elsif ( $b->ipod ) { var mylayout => 'iphone'; } elsif ( $b->mobile ) { var mylayout => 'mobile'; } elsif ( $b->ie ) { var mylayout => 'ie'; } else { var mylayout => 'main'; } } sub secure_and_detect { detect(); if ( ! session('username') && request->path_info !~ m{^/login}) { var requested_path => request->path_info; request->path_info('/login'); } } That lets me keep the two behaviors separate both in my head and in the code to avoid future confusion. Hope that helps. Mike. On Fri, Dec 17, 2010 at 6:44 AM, Gurunandan Bhat <gbhat@pobox.com> wrote:
On Fri, Dec 17, 2010 at 5:09 PM, David Precious <davidp@preshweb.co.uk>wrote:
On Friday 17 December 2010 06:31:33 Gurunandan Bhat wrote:
Hi,
Is there a way I can set whether a particular route handler calls before(). I am looking to implement authenticated/unauthenticated routes and would like to execute before() only if the route requires authentication. Any suggestions in doing something like this would be great.
before handlers are called before all requests, but you don't have to do anything if the request isn't one you're interested in.
e.g.
before sub { return if request->path_info !~ m{^/private/}; # Authentication stuff here }; Is that any use?
Yes, in effect, currently this is how I am doing it. What I have done now is to put the yaml config which I search in before() to check if I need to run at all.
Of course, that means the list of which routes require authentication is kept separately to the route declarations themselves, which might not be what you want.
Indeed. Thats what I am looking for: Ideally some syntactic sugar that I sweeten my route handler with:
*run before => true;*
Dancer does spoil you, doesn't it :)
Thank you.
Cheers
Dave P
_______________________________________________ Dancer-users mailing list Dancer-users@perldancer.org http://www.backup-manager.org/cgi-bin/listinfo/dancer-users
_______________________________________________ Dancer-users mailing list Dancer-users@perldancer.org http://www.backup-manager.org/cgi-bin/listinfo/dancer-users