【问题标题】:perl mojolicious - using flash gives wierd errorperl mojolicious - 使用 flash 会产生奇怪的错误
【发布时间】:2017-05-04 10:32:47
【问题描述】:

下面的代码给出了错误:

不能在 /usr/local/share/perl/5.22.1/Mojolicious/Controller.pm 第 286 行使用未定义的值作为 ARRAY 引用。

我不太确定我会如何处理它。尤其是它在源代码中引用了一个似乎与 cookie 加密有关的错误。而且我的应用程序不包含 cookie 或加密,所以这令人惊讶。

 sub remove {
    my $self = shift;
    my $host_id = $self->stash('host_id');

    $self->hosts->remove($self->stash('host')->{host_id});

    $self->flash(message => 'User created successfully!');
    $self->redirect_to('hosts');
}

【问题讨论】:

  • 它可能正在使用 cookie 实现 flash 消息。我必须阅读源代码。在该文件的第 286 行中是否有一个变量被用作数组引用?如果您通过 metacpan 查看,请确保检查 Mojo 的正确版本。
  • 开箱即用,Mojolicious 发送一个session cookie。它在客户端存储会话数据:为接下来的几个请求进行持久数据存储,所有会话数据都使用 Mojo::JSON 进行序列化,并将 Base64 编码存储在 HMAC-SHA1 签名的 cookie 中,以防止篡改。请注意,cookie 通常有 4096 字节 (4KB) 的限制,具体取决于浏览器。

标签: perl mojolicious flash-message


【解决方案1】:

当您将 undef 作为您的秘密时,很可能会发生这种情况。错误来自following line

my $checksum = Mojo::Util::hmac_sha1_sum($value, $self->app->secrets->[0]);

通常,秘密是预先生成的,这是不安全的,需要您在应用程序的配置中定义。 Mojo::Pg example application

{
    pg      => 'postgresql://tester:testing@/test',
    secrets => ['s3cret']
}

然后由应用程序本身使用

$self->secrets($self->config('secrets'));

如果您的应用程序从配置文件中设置了秘密,但配置文件没有声明秘密,或者密钥拼写错误,那么每当您尝试设置 cookie 时,都会返回您写入的错误,例如使用闪光灯。

【讨论】:

    猜你喜欢
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2012-06-08
    • 2015-04-13
    • 2022-10-29
    相关资源
    最近更新 更多