[dancer-users] How to change route in the before hook?

David Precious davidp at preshweb.co.uk
Thu Oct 24 17:40:49 BST 2013

On Thu, 24 Oct 2013 10:16:54 +0200
Gabor Szabo <gabor at szabgab.com> wrote:

> Using Dancer2 I would like to change the route before the user reaches
> the route. (e.g. if the user is not logged in)

> https://metacpan.org/pod/Dancer2::Cookbook#Before-filters---processed-before-a-request
> seems to suggest forward
> hook before => sub {
>     forward '/foo/oversee';
> };
> but that just lead me to deep recursion.
> Is this a bug or am I doing something wrong?
> My assumption was that after that forward the before hook should not
> run again. So maybe I need to rephrase the question? How to change
> the rout on the fly and NOT call the before hook again?

My understanding is that forward essentially starts a new request
internally, in much the same way as an external redirect would have but
without an additional HTTP exchange; as such the hook runs again.

A suitable fix would be to check the requested path and only forward if
the request isn't for the acceptable path, e.g.

  hook before => sub {
      if (request->path ne '/foo/oversee') {
          forward '/foo/oversee';

David Precious ("bigpresh") <davidp at preshweb.co.uk>
http://www.preshweb.co.uk/     www.preshweb.co.uk/twitter
www.preshweb.co.uk/linkedin    www.preshweb.co.uk/facebook
www.preshweb.co.uk/cpan        www.preshweb.co.uk/github

More information about the dancer-users mailing list