2017-05-04 66 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。