Hello all,
I think there is a good chance this is a case of “holding it wrong”, so I will
first explain what I’m trying to achieve.
Standard web app, multiple ways of establishing rights to privileged routes.
The first is standard username/password, establishing a session.
The second is via an API key (supplied with a header).
I use two separate controller methods, one to check the session, one to check
the header. Each one has the opportunity to set a stash variable indicating
that the user has a valid session (via either cookie session or API key).
So I use two “under” routes to call each method. So far so good, things work ok.
The problem I have is that I later have another under route, to establish a new
URL path for my REST interface.
Any requests that go through routes derived from that third “under" have a
strange behaviour - they call the second ‘under’ controller twice!
This is probably easiest to see with an example:
package TestUnder;
use Mojo::Base 'Mojolicious';
# This method will run once at server start
sub startup {
my $self = shift;
# Load configuration from hash returned by config file
my $config = $self->plugin('Config');
# Configure the application
$self->secrets($config->{secrets});
# Router
my $r = $self->routes;
# All requests should go through these two
$r = $r->under()->to('example#under_one');
$r = $r->under()->to('example#under_two');
$r->get('/')->to('example#welcome');
# REST interface
my $rest_v1 = $r->under('/rest/v1');
$rest_v1->get('/')->to('example#welcome');
}
package TestUnder::Controller::Example;
use Mojo::Base 'Mojolicious::Controller';
sub under_one {
my $self = shift;
$self->app->log->info("under_one called");
1;
}
sub under_two {
my $self = shift;
$self->app->log->info("under_two called");
1;
}
sub welcome {
my $self = shift;
$self->render(text => 'hi');
}
1;
Example below - you can easily see that for the “REST” route, ‘under_two’ is
called twice:
$ script/test_under get / >/dev/null
[2019-06-13 15:28:30.55547] [44306] [debug] GET "/" (9ca39c7c)
[2019-06-13 15:28:30.55627] [44306] [debug] Routing to controller
"TestUnder::Controller::Example" and action "under_one"
[2019-06-13 15:28:30.55637] [44306] [info] under_one called
[2019-06-13 15:28:30.55651] [44306] [debug] Routing to controller
"TestUnder::Controller::Example" and action "under_two"
[2019-06-13 15:28:30.55661] [44306] [info] under_two called
[2019-06-13 15:28:30.55675] [44306] [debug] Routing to controller
"TestUnder::Controller::Example" and action "welcome"
[2019-06-13 15:28:30.55704] [44306] [debug] 200 OK (0.001571s, 636.537/s)
$ script/test_under get /rest/v1 >/dev/null
[2019-06-13 15:28:34.95883] [44315] [debug] GET "/rest/v1" (6aad1c75)
[2019-06-13 15:28:34.95975] [44315] [debug] Routing to controller
"TestUnder::Controller::Example" and action "under_one"
[2019-06-13 15:28:34.95984] [44315] [info] under_one called
[2019-06-13 15:28:34.95997] [44315] [debug] Routing to controller
"TestUnder::Controller::Example" and action "under_two"
[2019-06-13 15:28:34.96005] [44315] [info] under_two called
[2019-06-13 15:28:34.96020] [44315] [debug] Routing to controller
"TestUnder::Controller::Example" and action "under_two"
[2019-06-13 15:28:34.96031] [44315] [info] under_two called
[2019-06-13 15:28:34.96044] [44315] [debug] Routing to controller
"TestUnder::Controller::Example" and action "welcome"
[2019-06-13 15:28:34.96083] [44315] [debug] 200 OK (0.001985s, 503.778/s)
$ mojo version
CORE
Perl (v5.26.1, darwin)
Mojolicious (8.17, Supervillain)
OPTIONAL
Cpanel::JSON::XS 4.04+ (n/a)
EV 4.0+ (n/a)
IO::Socket::Socks 0.64+ (n/a)
IO::Socket::SSL 2.009+ (2.051)
Net::DNS::Native 0.15+ (n/a)
Role::Tiny 2.000001+ (2.000005)
This version is up to date, have fun!
Regards,
Justin
--
You received this message because you are subscribed to the Google Groups
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/mojolicious/8EB007C9-0631-448B-B654-56C6D1EE0A5A%40hawkins.id.au.