[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