[Catalyst] upon successful login, how do i get redirect users back to the page they wanted to access previously?

kakimoto at tpg.com.au kakimoto at tpg.com.au
Sat Apr 18 13:34:44 GMT 2009


 Hello, everyone!
  I just implemented the change by storing the value of the path that I
wish to access into the session.
It works:)

 Nevertheless, I would still like to find out about your thoughts on flash.

Thank you

K. akimoto


Quoting kakimoto at tpg.com.au:

> Hello, everyone!
> 
>  thank you for your recommendations. 
> I have looked at the
> http://dev.catalystframework.org/wiki/wikicookbook/nextpageredirect
> link
> and
>
http://search.cpan.org/~hkclark/Catalyst-Manual-5.7020/lib/Catalyst/Manual/Tutorial/Authentication.pod.
> 
> Here's an extract, "As discussed in the previous chapter of the
> tutorial, flash allows you to set variables in a way that is very
> similar to stash, but it will remain set across multiple requests.
> Once
> the value is read, it is cleared (unless reset).".
> 
> 
> I tried using FLASH and yet it doesn't work for me.
> The value  I set in the flash gets lost after a redirect. Sorry to
> ask
> but does flash really work and is it reliable? I know setting stuff
> in
> the session variable is definitely reliable.
> 
> Here are some extracts.
> 
>  1) I access www.lginsurance.com.au/subscriptions/add
>  2) Since I am not logged in, Root->auto() kicks in and calls
> Login->index()
>  3) The path which I am requesting for (being '/subscriptions/add')
> gets
> stored in the flash, $c->flash->{'requested_page'} 
>  4) Looking at the debugging messages printed from Login.pm->, the 
> $c->flash->{'requested_page'} is empty (ie lost!)
> 5) The login form appears in my web browser and I log in.
> 6) All good in that I have authenticated myself but the page that
> loads
> is the main menu (instead of the 
>  page I previously wanted which is
> www.lginsurance.com.au/subscriptions/add). 
> 
> Does flash really work or should I just use the session variable?
> 
> 
> -------- Root.pm (start)
> ----------------------------------------------
> 
> sub auto : Private {
>     my ($self, $c) = @_;
> 
>     $c->log->debug(" Root.pm -> auto and path is ". $c->req->path()
> );
> 
>     if ($c->controller eq $c->controller('Login')) {
>         $c->log->debug(" Root.pm -> auto  - asked for login path");
>         return 1;
>     }
>     else{
>         if ($c->user_exists())
>         {   
>             my $requested_page = $c->flash->{'requested_page'};
>             $c->log->debug(" Root.pm -> auto  - USER's logged in.
> Proceed.($requested_page)");
> 
>             if ( $requested_page )
>             {   
>                 $c->log->debug(" Root.pm -> auto  - Requested Path
> is
> getting redirected to.");
>                 $c->response->redirect(
>                     $requested_page
>                 );
>                 $c->log->debug(" Root.pm -> auto  - BACK FROM
> REDIRECTION... ");
>             }
>             return 1;
>         }
>         else
>         {   
>             $c->log->debug(" Root.pm -> auto  - USER's not logged
> in.
> Forcing login and setting 'requested_page' = ". $c->req->pat
> h() );
>             $c->flash->{'requested_page'} = $c->req->path();
> 
>             $c->log->debug(" Root.pm -> auto  - USER's not logged
> in.
> RECHECKING THE 'requested_page' = ". $c->req->path() );
> 
>             $c->response->redirect($c->uri_for('/login'));
>             return 0;
>         }
> 
>     }
> 
> -------- Root.pm (end )
> ----------------------------------------------
> 
> -------- Login.pm (start )
> ----------------------------------------------
> 
> sub index : Private {
>     my ($self, $c) = @_;
>     $c->log->debug( " in login .pm " );
>     my $requested_page = $c->flash->{'requested_page'};
>     $c->log->debug(" Login.pm -> index- the path for requested_page
> is
> .($requested_page)");
>     
>     # Get the username and password from form
>     my $username = $c->request->params->{username} || '';
>     my $password = $c->request->params->{password} || '';
> 
>     # If the username and password values were found in form
>     if ($username && $password) {
>         # Attempt to log the user in
> 
>         if ($c->login($username, $password))
>         {
>             $c->log->debug(" Login.pm [authenticated current user]
> ->
> index... ");
> 
>         
>             # If successful, then let them use the application
>             $c->response->redirect( $c->uri_for('/') );
>             return 1;
>         }
>         else
>         {   
>             # Set an error message
>             $c->stash->{error_msg} = "Bad username or password.";
>         }
>     }   
>             
>     # If either of above don't work out, send to the login page
>     $c->stash->{template} = 'login.tt2';
>     
>     return 1;
> }   
>     
> 
> -------- Login.pm (end )
> ----------------------------------------------
> 
> 
> 
> Quoting Oliver Charles <oliver.g.charles at googlemail.com>:
> 
> > On Sat, Apr 18, 2009 at 2:34 AM,  <kakimoto at tpg.com.au> wrote:>
> > > hi, everybody,
> > >
> > > [snip]
> > >
> > > upon successful login, how do i get redirect users back to the
> page
> > they
> > > wanted to access previously (which is
> > > www.lginsurance.com.au/subcriptions/add)? At the moment, upon
> > successful
> > > login, menu.tt2 will be called.
> > 
> > At work we do this with http://tr.im/j75v . If an action requires
> > the
> > user to be authenticated, they call $c->forward('/user/login'). If
> > they are logged in, that action returns immediately and the action
> > can
> > continue. Otherwise, the current URI is stored in session, and the
> > login form is presented. Then, when the login is successful, the
> URI
> > is restored, and the user is redirect.
> > 
> > However... after seeing Devin's approach, which is essentially the
> > same but without the session, I may change to that. I believe the
> > two
> > approaches are essentially the same though.
> > 
> > -- 
> >     Oliver Charles / aCiD2
> > 
> > _______________________________________________
> > List: Catalyst at lists.scsys.co.uk
> > Listinfo:
> http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> > Searchable archive:
> > http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> > Dev site: http://dev.catalyst.perl.org/
> > 
> > 
> > 
> 
> 
> 
> 
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive:
> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/
> 
> 
> 






More information about the Catalyst mailing list