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/74528623aa5ff2738dd319cf70639e0...). 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@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@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@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@gmail.com> wrote:
Doesn't that get ignored in Dancer2?
On Mon, Sep 30, 2013 at 6:51 PM, Cymon <cymon.ML@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@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@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@dancer.pm > http://lists.preshweb.co.uk/mailman/listinfo/dancer-users >
-- Cymon Coniglio domina, http://www.therabbit.it _______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
_______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
-- Cymon Coniglio domina, http://www.therabbit.it _______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
-- Cymon Coniglio domina, http://www.therabbit.it