Jesse,

I like that solution a lot. Removing dependancy on cgiapp_init() and moving
the check for login / redirect into run-modes of their own makes a lot of
sense. I've been fairly busy on actual work lately and haven't had much of a
chance to update my login / session module. I might have a chance this
weekend at which time I'll incorporate your idea as well as a couple other
ideas of my own that I've had.

===
steve comrie :: senior developer
www.shrinkingplanet.ca

> ----- Original Message -----
> From: "Jesse Erlbaum" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Tuesday, December 04, 2001 10:24 AM
> Subject: RE: [cgiapp] Redirect problem in cgiapp_init
>
>
> > Hi Eric --
> >
> > > Seems like I'm authenticating with the login script just fine, but if
> > > I don't have a cookie set by thelogin script (i.e., I want to have the
> > > script redirect to the login script) and I request a script that is
> > > dependant on the login cookie, I fail init_session in that
> > > script...using the code on your home page:
> > >
> > >  $self->param( 'session_dir' => '/dir/to/save/session/files' );
> > >     unless ( $self->init_session( 'name_of_cookie' ) )
> > >     {
> > >         $self->header_type('redirect');
> > >         $self->header_props( -location =>
> > > 'http://location/of/login.cgi' );
> > >         return;
> > >     }
> >
> >
> > You probably shouldn't be doing it like this, anyway.  Instead, you
should
> > force the run-mode to one which performs the redirect.
> >
> > My suggestion:  Instead of implementing a cgiapp_init() method, use the
> > mode_param() subref/callback hook to write a function which does this.
> For
> > instance:
> >
> > sub setup {
> > my $self = shift;
> >
> > $self->run_modes(
> > # Set up your normal run-modes here
> > 'send_to_login' => 'send_to_login'
> > );
> >
> > # Set up mode_param as a call-back instead of form parameter
> > $self->mode_param(\&get_run_mode);
> > }
> >
> > sub get_run_mode {
> > my $self = shift;
> > unless (user_is_logged_in()) {
> > return 'send_to_login';
> > }
> >
> > # Do a normal check for run-mode
> > my $q = $self->query();
> > my $rm = $q->param('rm');
> > $rm = 'start_mode' unless (defined($rm));
> > return $rm;
> > }
> >
> > sub send_to_login {
> > my $self = shift;
> >
> > $self->header_type('redirect');
> > my $redirect_url = 'http://location/of/login.pl';
> > $self->header_props(url=>$redirect_url);
> > return "<a href=\"$redirect_url\">$redirect_url</a>";
> > }
> >
> >
> > This is a very clean solution.  When you set up redirect in your
> > cgiapp_init(), you STILL end up running the run-mode -- it just *may*
get
> > redirected.  Very likely, this will result in a bug.
> >
> > Mark's solution of hooking into the start_mode() is a good one.  The
> > solution I've outlined above takes that basic idea and goes to the next
> > logical step.
> >
> > -Jesse-
> >
> >
> > ----
> >
> >   Jesse Erlbaum, CTO
> >   Vanguard Media
> >   212.242.5317 x115
> >   [EMAIL PROTECTED]
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to