登录后重定向到上一页? Mojolicious

时间:2015-10-16 09:41:50

标签: perl redirect mojolicious

标题几乎总结了我的问题。我有我的登录控制器,我想在登录后重定向到上一页。例如,如果我正在查看“联系我们”页面,那么我登录后,我想重定向回“联系我们”页面。只是想知道实现这一目标的最佳方法。

3 个答案:

答案 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 answeralexk's commentEugen'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');