[Catalyst] Saving redirect URL in flash not sticking through login process

will trillich will.trillich at serensoft.com
Mon Jan 24 05:36:50 GMT 2011


I think stash is the ephemeral one-shot hashref, whereas flash is the
next-request's preloaded stash. That is, you can load up your flash with
whatever you need, and then do a full $c->res->redirect() somewhere -- which
fires off a browser redirect and a new request -- and your then-stash will
have all the goodies you plopped in there.

And, being the stash, it's all wiped out when the request is done. So a
follow-up request (or redirect) would either have an empty stash, or it'd
require the second request-handling routines to stuff things into flash
(again).

So it's not that "flash" is permanent, it's not. It's just a pre-load for
the next-request's short-lived stash.


On Sun, Jan 23, 2011 at 10:58 PM, Eric Berg <eberg at bergbrains.com> wrote:

>  Thanks, Will.  That I figured that would work, but I thought that the
> flash was the right way to do it -- especially with the automatic cleanup,
> so I was holding off on trying that.
>
> Why doesn't flash work across these multiple requests?  I thought that was
> the whole idea of flash vs. stash.
>
> Eric
>
>
> On 1/23/11 11:52 PM, will trillich wrote:
>
> The flash is moved to the stash after the redirect, and then it's gone
> after that, right?
>
>  What we do is stuff the intended destination into the session and then
> pull it from there:
>
>  sub login : Chained('/') PathPart('login') Args(0) {
>     my ( $self, $c ) =3D @_;
>
>      my $form =3D Spill::Form::Login->new( action =3D> $c->uri_for('/logi=
n')
> );
>
>      $c->stash(
>         template =3D> 'login.tt2',
>         form     =3D> $form,
>     );
>
>      if ( $c->action ne 'login' ) {
>         # Stuff destination into session for later redirect if user
> authenticates
> *        $c->session->{redirect} =3D $c->req->uri->as_string;*
>     }
>
>  ...then, later, after authenticating...
>
>              my $go =3D *delete( $c->session->{redirect} )* ||
> $c->req->headers->referer;
>             $go =3D '/' if $go =3D~ /\blog(in|out)\b/;
>             $c->res->redirect( $go );
>             $c->detach;
>
>
> On Sun, Jan 23, 2011 at 8:27 PM, Eric Berg <eberg at bergbrains.com> wrote:
>
>> If a user submits a certain form without being logged in, I flash the
>> current URL, save the params in the session, and redirect them to the lo=
gin.
>>
>> In my Login controller, I look for $c->flash->{redirect_url} and redirect
>> them back to that URL.
>>
>> The problem is that that flash entry is gone after the user submits the
>> login form.  I logged out the redirect URL at the beginning of my login
>> routine and it comes through the first time, but even if I don't access =
it
>> via the log statement, that redirect_url key is not there in the flash w=
hen
>> the user submits the login form with their credentials.
>>
>> I've tried resetting $c->flash->{redirect_url} in the login routine and
>> also tried $c->keep_flash( qw( redirect_url )) in the login routine, but=
 no
>> go.
>>
>> Any thoughts on what I might be doing wrong?
>>
>> Eric
>>
>> _______________________________________________
>> 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/
>>
>
>
>
> --
> The first step towards getting somewhere is to decide that you are not
> going to stay where you are.  -- J.P.Morgan
>
>
> _______________________________________________
> 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.u=
k/
> 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/
>
>


-- =

The first step towards getting somewhere is to decide that you are not going
to stay where you are.  -- J.P.Morgan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20110123/9c4af=
42c/attachment.htm


More information about the Catalyst mailing list