【问题标题】:Mojolicious, redirects, session and trying to create an authentication systemMojolicious、重定向、会话和尝试创建身份验证系统
【发布时间】:2015-04-09 20:10:36
【问题描述】:

我试图在我的 Mojolicious 应用程序中摆脱基本身份验证。我能够检测到会话密钥的缺失并重定向到登录页面。然后登录页面发布到我的应用程序,我向后端进程进行身份验证。该后端进程返回成功,然后我的 mojo 应用程序设置会话如下:

$self->session( user => $name, groups => $groups );

在调试时,$name 和 $group 都已定义且有效。然后我希望重定向到我的应用程序的“受保护”空间。重定向位于正确的位置,但未能检测到 $self->session('user') (调试时为 undef)我最终重定向回重复登录。

我将在下面包含设置的 sn-ps。我错过了什么?

MyApp.pm

my $r = $self->routes;
$r->route('/verify')->via('post')->to('util-auth#verify')->name('verify');
$r->route('/login')->via('get')->to('util-auth#login')->name('login');
my $app = $r->under('/myapp')->to('util-auth#check');

$app->route('/foo')->via('get')->to('controller-api#foo')->name('foo');

MyApp::Util::Auth

sub verify {
    my $self = shift;
    my $name = $self->param('username');
    my $pass = $self->param('password');
    my $dest = "/myapp/foo"; # in the protected area

    if ( $self->authenticate($name, $pass) ) {
        my $groups = $self->get_groups($name);
        $self->session(
            user => $name,
            groups => $groups,
        );
    }
    else {
        $self->flash( message => "invalid login..." );
    }
    $self->redirect_to($dest);
}

sub login {
    my $self = shift;
    $self->render();    # renders the login form
}

sub check {
    my $self = shift;
    my $user = $self->session('user');
    return 1 if defined $user;
    $self->redirect_to('/login');
    return 0;
}

【问题讨论】:

  • 不一定,另外我想了解为什么这不起作用。对我来说最大的谜团是为什么会话 cookie 在重定向后不可用。
  • 您找到答案了吗?我现在处于同样的境地。在正确的“$self->authenticate”之后,会话具有正确的“auth_data”值,但在重定向或加载另一个页面之后,该值从会话中消失了。

标签: perl session authentication mojolicious


【解决方案1】:

我遇到了类似的问题,最后我把它们藏起来了。我认为会话是基于字符串的,主要是因为设置了会话信息的 cookie。

【讨论】:

    【解决方案2】:

    为什么你的verify 函数接受名称,通过@_ 变量传递?

    可能需要使用$self->param('name')$self->param('pass')

    在此处查看工作示例: https://gist.github.com/Logioniz/bdf6f22c00fc51798c43

    【讨论】:

    • 你是对的,我在我的代码中就是这样......我只是在这个例子中输入错误。我会看看你的要点,看看我是否能看到任何差异。我也会编辑我的帖子。谢谢
    猜你喜欢
    • 2019-07-04
    • 2016-04-16
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多