登录后重定向到上一页?欢快的
Redirecting to previous page after login? Mojolicious
标题几乎准确地概括了我的问题。我有我的登录控制器,我想在登录后重定向到上一页。例如,如果我正在查看“联系我们”页面,然后我登录,我希望被重定向回“联系我们”页面。只是想知道实现此目标的最佳方法。
您可以查看推荐人。
$controller->redirect_to($controller->req->headers->referrer);
可能没有上面那个方案漂亮,但是我用一个参数来传递'previous'页面的url(back_url)。如果参数为空,我可以设置一个默认页面登陆。
my $self = shift;
my $back_url = $self->param('back_url');
$back_url = '/publications' if $back_url eq $self->req->url->to_abs or $back_url eq '';
# code here
$self->redirect_to($back_url);
基于 , and
$app->helper(redirect_to_referrer_or_homepage => sub {
my ($c) = @_;
if (my $r = $c->req->headers->referrer) {
$c->app->log->debug('Referrer: ' . $r);
# both to_abs for comparison
$r = Mojo::URL->new($r)->to_abs;
my $login = $c->url_for('login')->to_abs;
# Eugen's: check that you refer back to your site and not to third party
if ($r->host eq $login->host) {
# alexk's: Unless the referer is the login page itself
unless ($r eq $login) {
$c->redirect_to($r);
return; # bail
}
}
}
$c->redirect_to('/');
});
像这样使用:
$r->get('/login' => sub {
my $c = shift;
if (...) {
$c->redirect_to_referrer_or_homepage();
return; # bail
}
else {
...
}
})->name('login');
标题几乎准确地概括了我的问题。我有我的登录控制器,我想在登录后重定向到上一页。例如,如果我正在查看“联系我们”页面,然后我登录,我希望被重定向回“联系我们”页面。只是想知道实现此目标的最佳方法。
您可以查看推荐人。
$controller->redirect_to($controller->req->headers->referrer);
可能没有上面那个方案漂亮,但是我用一个参数来传递'previous'页面的url(back_url)。如果参数为空,我可以设置一个默认页面登陆。
my $self = shift;
my $back_url = $self->param('back_url');
$back_url = '/publications' if $back_url eq $self->req->url->to_abs or $back_url eq '';
# code here
$self->redirect_to($back_url);
基于
$app->helper(redirect_to_referrer_or_homepage => sub {
my ($c) = @_;
if (my $r = $c->req->headers->referrer) {
$c->app->log->debug('Referrer: ' . $r);
# both to_abs for comparison
$r = Mojo::URL->new($r)->to_abs;
my $login = $c->url_for('login')->to_abs;
# Eugen's: check that you refer back to your site and not to third party
if ($r->host eq $login->host) {
# alexk's: Unless the referer is the login page itself
unless ($r eq $login) {
$c->redirect_to($r);
return; # bail
}
}
}
$c->redirect_to('/');
});
像这样使用:
$r->get('/login' => sub {
my $c = shift;
if (...) {
$c->redirect_to_referrer_or_homepage();
return; # bail
}
else {
...
}
})->name('login');