2015-05-27 13 views
9

Le richieste di post funzionano correttamente eseguendo l'applicazione Laravel 5 su PHP 5.4. richieste POST sul stessa applicazione esecuzione su PHP 5.6.9 generano:Laravel 5 TokenMismatchException su PHP 5.6.9

TokenMismatchException VerifyCsrfToken.php on line 46

Questo accade su ogni richiesta post su entrambi WAMP e IIS. Succede usando sessioni di database e sessioni di file. Ha fatto una reinstallazione completa e anche provato tutti i suggerimenti fatti qui: https://laracasts.com/discuss/channels/general-discussion/keep-getting-tokenmismatchexception-verifycsrftokenphp-on-line-46?page=2. La gente sta disabilitando il middleware Csrf come una correzione, ma questa non è una soluzione praticabile. Qualsiasi aiuto apprezzato.

+0

Sarei tentato di eseguire il debug di 'app/Http/Middleware/VerifyCsrfToken.php' e prima di restituire parent :: handle ($ request, $ next);' fare qualcosa del tipo: 'dd ([Input :: all(), Session :: all()]) '- prova il' _token' nella sessione corrisponde a '_token' nel tuo input. – ash

+0

Ho modificato il motore della cache cookie/sessione in '.env'. 'CACHE_DRIVER = File SESSION_DRIVER = file' – Xeoncross

risposta

17

Quando ho capito questo stava accadendo solo in IE e Chrome, ma non Firefox, che mi ha portato alla risolvere. L'app utilizzava i pulsanti di condivisione AddThis e il javascript aggiungeva un iframe alle pagine. Questo problema viene risolto aggiungendo un'intestazione P3P al middleware VerifyCsrfToken. Spero che questo salvi qualcuno nelle ore che ho perso.

public function handle($request, Closure $next) 
    { 
     $response = $next($request); 

     if (last(explode('\\',get_class($response))) != 'RedirectResponse') { 
      $response->header('P3P', 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); 
     } 

     return $response; 
    } 
+0

ha richiesto solo poche ore 4 5: /: 3 –

+0

grazie mille! stesso problema – Janky

+0

Mi ha risparmiato un sacco di tempo – vvr02

0

messo <meta name="csrf_token" content="{{ csrf_token() }}"> modo di token è sempre disponibile e l'uso che con la vostra richiesta AJAX: es:

var csrftoken = (function() { 
var metas = window.document.getElementsByTagName('meta'); 
for(var i=0 ; i < metas.length ; i++) { 
    if (metas[i].name === "csrf-token") { 
     return metas[i].content; 
    } 
}})(); 
+0

questo potrebbe essere oneline con jQuery – dynamic

+1

Sì, potrebbe, qualcosa come' $ .ajaxSetup ({ intestazioni: { 'X-CSRF-token': $ ('meta [name =" csrf_token "] '). attr (' contenuto ') } });' –

0

basta aggiungere {{ csrf_field() }} al blocco form e vi farà risparmiare molto tempo

<form action="{{ route('signup') }}" method="post" class="form-signin"> 
{{ csrf_field() }} 
... 
</form> 
0

Per chiunque, che sta affrontando questo problema, nonostante l'aggiunta {{ csrf_field() }} nel campo form e anche con l'aggiunta di questo nel tag head <meta name="csrf-token" content="{{ csrf_token() }}">

Il problema è con la scrittura nella memoria perché non si aggiunge l'utente corrente su Linux nel gruppo corretto. Assicurati di aggiungere il tuo utente corrente al gruppo www-data. Scrivere questo comando

sudo chown -R :www-data /path/to/laravel-folder 

Assicurati di dare il permesso diritto alla cartella di archiviazione e in app laravel.

sudo chmod -R 775 /path/to/laravel-folder/storage 

Spero che questo aiuti.