标题几乎总结了我的问题。我有我的登录控制器,我想在登录后重定向到上一页。例如,如果我正在查看“联系我们”页面,那么我登录后,我想重定向回“联系我们”页面。只是想知道实现这一目标的最佳方法。
答案 0 :(得分:8)
您可以查看推荐人。
$controller->redirect_to($controller->req->headers->referrer);
答案 1 :(得分:2)
它可能不像上面的解决方案那么漂亮,但我使用一个参数来传递前一个'的网址。 page(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);
答案 2 :(得分:0)
基于Chankey's answer,alexk's comment和Eugen's comment
$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');