2017-05-04 72 views
1

下面的代码是给错误:perl的mojolicious - 使用闪光灯给人奇怪的错误

不能使用一个未定义的值作为/usr/local/share/perl/5.22.1/Mojolicious/数组引用Controller.pm line 286.

我不太确定我会如何处理它。特别是因为它在源代码中引用了一个似乎与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'); 
} 
+0

它可能正在使用cookie实现Flash消息。我必须阅读来源。是否有一个变量被用作该文件第286行中的数组ref?如果你通过metacpan查看,请确保你检查了Mojo的正确版本。 – simbabque

+0

开箱即用,Mojolicious发送[session cookie](https://metacpan.org/pod/Mojolicious#sessions)。它将会话数据存储在客户端:*为接下来的几个请求提供持久数据存储,所有会话数据都使用Mojo :: JSON进行序列化,并将存储的Base64编码到HMAC-SHA1签名的Cookie中,以防篡改。请注意,Cookie通常具有4096字节(4KB)的限制,具体取决于浏览器。* –

回答

1

这很有可能发生在您将undef作为您的秘密时。错误来自following line

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

通常情况下,秘密是预先生成这是不安全的,需要由您在应用程序的配置定义。它使用一个例子是在Mojo::Pg example application

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

,然后由应用程序本身

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

消耗如果你的应用程序设置了秘密从一个配置文件,但配置文件不声明一个秘密,或者密钥被拼错了,每当你尝试设置一个cookie时,你写的错误都会被返回,比如使用flash。