[dancer-users] Tiny problem with sessions in a Dancer2 plugin
Pedro Melo
melo at simplicidade.org
Sat Oct 5 06:41:27 BST 2013
Hi,
Have you looked at https://github.com/PerlDancer/Dancer2/issues/432 ? I
think this is the same issue.
Bye,
On Fri, Oct 4, 2013 at 11:29 PM, Cymon <cymon.ML at gmail.com> wrote:
> Hi,
> what Dancer2 version are you using?
>
> I think I found a bug in the last master branch.
>
> In it, redirected response are configured with halted status
> (Dancer2/Core/Context.pm, line 181. this is the commit:
>
> https://github.com/PerlDancer/Dancer2/commit/74528623aa5ff2738dd319cf70639e0b434a3f20
> ).
> Problem is that in the dispatcher halted responses don't trigger the
> after_request hook.
> Session flush, in App.pm, is configured to happen on an after_request
> hook, so I think this is the reason your code fails.
>
> Has anyone an idea about how to solve this? I'll try to think about it
> too, but at the moment I have no solution...
>
> Gideon, if you want to go on with your app you can use this dark dark
> dark dark magic:
>
> my $controller = sub { $dsl->session(user => "Yippikiayeeeh");
> my $redir = $dsl->redirect("/");
> $dsl->context->response->is_halted(0);
> return $redir;
> };
>
> Obviously is a dirty workaround, I don't know all the side effects of
> this.
>
>
> Cymon
> http://perlishscrewdriver.blogspot.it/
>
>
>
> Il giorno Fri, 4 Oct 2013 20:55:05 +0530
> "Gideon D'souza" <gidisrael at gmail.com> ha scritto:
>
> > I found the source of the problem, and it still leaves me hanging.
> >
> >
> > For some hideous reason, if I redirect after making the request for
> > the users json data, the session is undef in the main application.
> > However, if I don't redirect. Then goto the homepage from the
> > browser, it accesses my session! :S
> >
> >
> > my $jresp =
> > $browser->get("https://api.github.com/user?access_token=$acc"); my
> > $json = decode_json($jresp->decoded_content);
> > $dsl->session(github_user => $json); #also tested by just setting a
> > string instead of json! $dsl->session(github_access_token => $acc);
> > return "done"; #This works fine!
> > #but if I # return $dsl->redirect("/"); #it doesn't work !
> >
> >
> > And worst of all, if I take your code and do this:
> >
> > my $controller = sub { $dsl->session(user => "Yippikiayeeeh");
> > return $dsl->redirect("/");};
> >
> > it works! but for me it doesn't me. The session goes undef.
> >
> > I tried it with a YAML backend and the default (simple session)
> >
> >
> >
> >
> > On Fri, Oct 4, 2013 at 4:14 AM, Cymon <cymon.ML at gmail.com> wrote:
> >
> > > I wrote a code similar to yours and it works for me.
> > >
> > > Here the routes:
> > >
> > > package Test;
> > > use Dancer2;
> > > use Dancer2::Plugin::Dummy;
> > >
> > > get '/' => sub {
> > >
> > > if (not defined(session->read('user'))) {
> > > return "No user"
> > > }
> > > else
> > > {
> > > return "User is here"
> > > }
> > > };
> > >
> > > 1;
> > >
> > > Here the dummy plugin:
> > >
> > > package Dancer2::Plugin::Dummy;
> > > use Dancer2::Plugin;
> > >
> > > on_plugin_import {
> > > my $dsl = shift;
> > > my $controller = sub { $dsl->session(user => "Yippikiayeeeh");
> > > return "You have a user now!"};
> > > $dsl->any(['get'] => '/populate/session', $controller); };
> > >
> > > register_plugin for_versions => [ 2 ];
> > >
> > >
> > > If I go to populate/session and the on the home I can see user
> > > populated.
> > >
> > > What kind of session manager are you using? Are you sure it's
> > > working well?
> > >
> > > Cymon
> > > http://perlishscrewdriver.blogspot.it/
> > >
> > >
> > >
> > >
> > >
> > > Il giorno Fri, 4 Oct 2013 00:36:23 +0530
> > > "Gideon D'souza" <gidisrael at gmail.com> ha scritto:
> > >
> > > > Tried it, It still goes into a redirect loop because the session
> > > > is always undef the sub for "/".
> > > >
> > > > :( I'd really appreciate anyone just peeing into this!
> > > >
> > > >
> > > > On Tue, Oct 1, 2013 at 4:48 AM, Slavik Goltser <slavikg at gmail.com>
> > > > wrote:
> > > >
> > > > > Doesn't that get ignored in Dancer2?
> > > > >
> > > > >
> > > > > On Mon, Sep 30, 2013 at 6:51 PM, Cymon <cymon.ML at gmail.com>
> > > > > wrote:
> > > > >
> > > > >> Hi,
> > > > >> i tried your code.
> > > > >>
> > > > >> Did you remember to add:
> > > > >>
> > > > >> register_plugin for_versions => [ 2 ];
> > > > >>
> > > > >> at the end of the plugin?
> > > > >> It will not work without this.
> > > > >>
> > > > >> Cymon
> > > > >> http://perlishscrewdriver.blogspot.it/
> > > > >>
> > > > >> Il giorno Sun, 29 Sep 2013 22:55:05 +0530
> > > > >> "Gideon D'souza" <gidisrael at gmail.com> ha scritto:
> > > > >>
> > > > >> > Thank you very much for your time.
> > > > >> >
> > > > >> > I tried it. No luck still.
> > > > >> >
> > > > >> > If I may bother you so:
> > > > >> >
> > > > >> > on_plugin_import {
> > > > >> > my $dsl = shift;
> > > > >> > my $controller = sub { ...; ...; $dsl->session(user =>
> > > > >> > $some_json);} $dsl->any(['get'] => '/your/path',
> > > > >> > $controller); }
> > > > >> >
> > > > >> > in app that uses this plugin:
> > > > >> >
> > > > >> > get '/' => sub {
> > > > >> >
> > > > >> > if (not defined(session->read('user'))) {
> > > > >> > ######
> > > > >> > #session->Read('user') is always undef!!!
> > > > >> > ######
> > > > >> > return redirect auth_github_authenticate_url;
> > > > >> > }
> > > > >> > };
> > > > >> >
> > > > >> > Any clues here?
> > > > >> >
> > > > >> >
> > > > >> > On Sun, Sep 29, 2013 at 6:49 PM, Cymon <cymon.ML at gmail.com>
> > > > >> > wrote:
> > > > >> >
> > > > >> > >
> > > > >> > > >
> > > > >> > > > Is there a way to add routes inside a plugin, on init or
> > > > >> > > > something like that? Or perhaps it's something else I've
> > > > >> > > > missed?
> > > > >> > > >
> > > > >> > > > Any reply or pointers appreciated.
> > > > >> > >
> > > > >> > > Hi,
> > > > >> > > I have no time to try your code now and help you with your
> > > > >> > > issue, but I can answer this.
> > > > >> > >
> > > > >> > > To add routes inside a plugin just define the
> > > > >> > > on_plugin_import sub in your plugin package as this.
> > > > >> > >
> > > > >> > > on_plugin_import {
> > > > >> > > my $dsl = shift;
> > > > >> > > my $controller = sub { ...do things ... }
> > > > >> > > $dsl->any(['get'] => '/your/path', $controller);
> > > > >> > > }
> > > > >> > >
> > > > >> > >
> > > > >> > > --
> > > > >> > > Cymon
> > > > >> > > http://perlishscrewdriver.blogspot.it/
> > > > >> > > _______________________________________________
> > > > >> > > dancer-users mailing list
> > > > >> > > dancer-users at dancer.pm
> > > > >> > > http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
> > > > >> > >
> > > > >>
> > > > >>
> > > > >> --
> > > > >> Cymon
> > > > >> Coniglio domina,
> > > > >> http://www.therabbit.it
> > > > >> _______________________________________________
> > > > >> dancer-users mailing list
> > > > >> dancer-users at dancer.pm
> > > > >> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
> > > > >>
> > > > >
> > > > >
> > > > > _______________________________________________
> > > > > dancer-users mailing list
> > > > > dancer-users at dancer.pm
> > > > > http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
> > > > >
> > > > >
> > >
> > >
> > > --
> > > Cymon
> > > Coniglio domina,
> > > http://www.therabbit.it
> > > _______________________________________________
> > > dancer-users mailing list
> > > dancer-users at dancer.pm
> > > http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
> > >
>
>
> --
> Cymon
> Coniglio domina,
> http://www.therabbit.it
> _______________________________________________
> dancer-users mailing list
> dancer-users at dancer.pm
> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
>
--
Pedro Melo
@pedromelo
http://www.simplicidade.org/
xmpp:melo at simplicidade.org
mailto:melo at simplicidade.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.preshweb.co.uk/pipermail/dancer-users/attachments/20131005/9949c4bc/attachment.html>
More information about the dancer-users
mailing list