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

will trillich will.trillich at serensoft.com
Mon Jan 24 05:41:30 GMT 2011


Altho the implications here
http://search.cpan.org/~bobtfish/Catalyst-Plugin-Session-0.31/lib/Catalyst/=
Plugin/Session.pm#METHODS
are that you can do multiple redirects with one $c->flash -- to wit:

"""
The flash data will be cleaned up only on requests on which actually use
$c->flash (thus allowing multiple redirections), and the policy is to delete
all the keys which haven't changed since the flash data was loaded at the
end of every request.
"""

We just treat it as a preloaded stash, and that seems to work fine for us.
If we want a more permanent chunk of data, we inject it into $c->session.



On Sun, Jan 23, 2011 at 11:36 PM, will trillich <will.trillich at serensoft.com
> wrote:

> 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 -- wh=
ich
> 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 cleanu=
p,
>> so I was holding off on trying that.
>>
>> Why doesn't flash work across these multiple requests?  I thought that w=
as
>> 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('/log=
in')
>> );
>>
>>      $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 l=
ogin.
>>>
>>> In my Login controller, I look for $c->flash->{redirect_url} and redire=
ct
>>> 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 =
when
>>> 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, bu=
t 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.=
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/
>>
>>
>
>
> --
> The first step towards getting somewhere is to decide that you are not
> going to stay where you are.  -- J.P.Morgan
>



-- =

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/bbc8c=
88c/attachment.htm


More information about the Catalyst mailing list