[cgiapp] CAP::Authentication->redirect_after_login

n1zero at aol.com n1zero at aol.com
Wed Jun 16 12:18:08 EDT 2010


I am using CA::Dispatch & CAP::Authentication in pretty much their out-the-box state.
I have found that I get this to work only if I hack a line in CAP::Authentication, but I'd like to know why things don't work without the hack and what I should do to avoid it.

For apache I have
    DocumentRoot /srv/trial/www/
    PerlOptions +Parent
    PerlSwitches -I/srv/trial/mod
    PerlSwitches -I/srv/trial/lib
    <Location /trial>
        SetHandler perl-script
        PerlHandler CGI::Application::Dispatch
    </Location>
so that the user hits /trial/mod3/page2 and this is dispatched to Mod3.pm in runmode page2.
(This all works perfectly.)

In Mod3.pm I have
__PACKAGE__->authen->protected_runmodes('page2');
so that upon the above hit, the user is given the built-in login form.
(This all works perfectly.)

But this is where it goes wrong.  When the user hits <Sign In> the post goes to /trial, which doesn't exist (in this example app).  Looking at the page of the form reveals it has action="/trial".
That comes from CAP::Authentication, "my $action = $query->url( -absolute => 1 );", which gives in my case '/trial'.  Now, it turns out $destination is set correctly, so if I follow this with "$action = $destination" then it all appears to work perfectly.  I'm guessing this is a case of user error, but I can't see what I've done wrong to make $query->url give a less-than-useful value.

While we're discussing this I could do with some advice.  In this scheme it's natural for the user to go to /trial/mod3 but if they do that then relative links to 'page2' will go to /trial/page2 which doesn't exist.  I need to force such hits to go instead to /trial/mod3/ or at least treat them as if that's what they hit.  I should only do that if it's the mod that's missing the '/'; doing it to get /trial/mod3/page1/ would be just as broken.  The question is where is best to do that: in a subclass of Dispatch or in a prerun method of my CA subclass?

thanks,
Nic



More information about the cgiapp mailing list