perl mojolicious - 使用flash会出现奇怪的错误

时间:2017-05-04 10:32:47

标签: perl mojolicious flash-message

以下代码给出错误:

不能在/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');
}

1 个答案:

答案 0 :(得分: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时,您所写的错误都将被返回,例如使用闪光灯。