2017-05-04 8 views
1

Le code ci-dessous donne l'erreur:perl Mojolicious - en utilisant le flash donne erreur wierd

ne peut pas utiliser une valeur non définie comme une référence à MATRICE /usr/local/share/perl/5.22.1/Mojolicious/ ligne Controller.pm 286.

et je ne suis pas particulièrement sûr comment je m'y prendre pour manipuler. D'autant qu'il cite une erreur dans le code source qui semble être liée au chiffrement des cookies. Et mon application ne contient pas de cookies ou de cryptage, ce qui est surprenant.

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

Il pourrait implantera le message flash à l'aide d'un cookie. Je devrais lire la source. Y a-t-il une variable qui est utilisée comme tableau ref à la ligne 286 de ce fichier? Assurez-vous de vérifier la bonne version de Mojo si vous regardez par métacpan. – simbabque

+0

De la boîte, Mojolicious envoie un [cookie de session] (https://metacpan.org/pod/Mojolicious#sessions). Il stocke les données de session sur le côté client: * stockage de données persistant pour les demandes PROCHAINS, toutes les données de la session se sérialisé avec Mojo :: JSON et stocké Base64 dans HMAC-SHA1 signé les cookies, pour éviter toute manipulation. Notez que les cookies ont généralement une limite de 4 096 octets (4 Ko), selon le navigateur. * –

Répondre

1

Cela se produit le plus probable lorsque vous avez undef que vos secrets. L'erreur provient de la following line:

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

Normalement, le secret est par vous prégénérée qui est précaire et doit être défini dans la configuration de l'application. Un exemple de celui-ci utilisé est dans le Mojo::Pg example application:

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

qui est ensuite consommée par l'application elle-même

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

Si votre application définit les secrets d'un fichier de configuration, mais le fichier de configuration ne déclarer un secret, ou la clé a été mal orthographié, l'erreur que vous écrivez sera rendue chaque fois que vous essayez de définir un cookie, comme l'utilisation du flash.