1

Quelqu'un at-il déployé Laravel 5.4 sur Google Cloud?Laravel 5.4 sur Google Cloud TokenMismatchException

je besoin d'aide que je continue à recevoir TokenMismatch Exception - ligne 68 VerifyCsrfToken.php quel que soit l'ajout {{ Session::token() }} ou {{ csrf_token() }}.

Après le débogage, je constate que la page rafraîchir une nouvelle page de chargement du token change constamment + session est supprimé. Ainsi, j'ai ajouté le Post deploy scripts

"post-deploy-cmd": [ 
"chmod -R 777 storage", 
"chmod -R 777 bootstrap\/cache", 
"php artisan cache:clear", 
"php artisan key:generate" 
] 

Voici le fichier session.php

<?php 

return [ 

/* 
|-------------------------------------------------------------------------- 
| Default Session Driver 
|-------------------------------------------------------------------------- 
| 
| This option controls the default session "driver" that will be used on 
| requests. By default, we will use the lightweight native driver but 
| you may specify any of the other wonderful drivers provided here. 
| 
| Supported: "file", "cookie", "database", "apc", 
|   "memcached", "redis", "array" 
| 
*/ 

'driver' => env('SESSION_DRIVER', 'file'), 

/* 
|-------------------------------------------------------------------------- 
| Session Lifetime 
|-------------------------------------------------------------------------- 
| 
| Here you may specify the number of minutes that you wish the session 
| to be allowed to remain idle before it expires. If you want them 
| to immediately expire on the browser closing, set that option. 
| 
*/ 

'lifetime' => 120, 

'expire_on_close' => false, 

/* 
|-------------------------------------------------------------------------- 
| Session Encryption 
|-------------------------------------------------------------------------- 
| 
| This option allows you to easily specify that all of your session data 
| should be encrypted before it is stored. All encryption will be run 
| automatically by Laravel and you can use the Session like normal. 
| 
*/ 

'encrypt' => false, 

/* 
|-------------------------------------------------------------------------- 
| Session File Location 
|-------------------------------------------------------------------------- 
| 
| When using the native session driver, we need a location where session 
| files may be stored. A default has been set for you but a different 
| location may be specified. This is only needed for file sessions. 
| 
*/ 

'files' => storage_path('framework/sessions'), 

/* 
|-------------------------------------------------------------------------- 
| Session Database Connection 
|-------------------------------------------------------------------------- 
| 
| When using the "database" or "redis" session drivers, you may specify a 
| connection that should be used to manage these sessions. This should 
| correspond to a connection in your database configuration options. 
| 
*/ 

'connection' => null, 

/* 
|-------------------------------------------------------------------------- 
| Session Database Table 
|-------------------------------------------------------------------------- 
| 
| When using the "database" session driver, you may specify the table we 
| should use to manage the sessions. Of course, a sensible default is 
| provided for you; however, you are free to change this as needed. 
| 
*/ 

'table' => 'sessions', 

/* 
|-------------------------------------------------------------------------- 
| Session Cache Store 
|-------------------------------------------------------------------------- 
| 
| When using the "apc" or "memcached" session drivers, you may specify a 
| cache store that should be used for these sessions. This value must 
| correspond with one of the application's configured cache stores. 
| 
*/ 

'store' => null, 

/* 
|-------------------------------------------------------------------------- 
| Session Sweeping Lottery 
|-------------------------------------------------------------------------- 
| 
| Some session drivers must manually sweep their storage location to get 
| rid of old sessions from storage. Here are the chances that it will 
| happen on a given request. By default, the odds are 2 out of 100. 
| 
*/ 

'lottery' => [2, 100], 

/* 
|-------------------------------------------------------------------------- 
| Session Cookie Name 
|-------------------------------------------------------------------------- 
| 
| Here you may change the name of the cookie used to identify a session 
| instance by ID. The name specified here will get used every time a 
| new session cookie is created by the framework for every driver. 
| 
*/ 

'cookie' => 'laravel_session', 

/* 
|-------------------------------------------------------------------------- 
| Session Cookie Path 
|-------------------------------------------------------------------------- 
| 
| The session cookie path determines the path for which the cookie will 
| be regarded as available. Typically, this will be the root path of 
| your application but you are free to change this when necessary. 
| 
*/ 

'path' => '/', 

/* 
|-------------------------------------------------------------------------- 
| Session Cookie Domain 
|-------------------------------------------------------------------------- 
| 
| Here you may change the domain of the cookie used to identify a session 
| in your application. This will determine which domains the cookie is 
| available to in your application. A sensible default has been set. 
| 
*/ 

'domain' => env('SESSION_DOMAIN', null), 

/* 
|-------------------------------------------------------------------------- 
| HTTPS Only Cookies 
|-------------------------------------------------------------------------- 
| 
| By setting this option to true, session cookies will only be sent back 
| to the server if the browser has a HTTPS connection. This will keep 
| the cookie from being sent to you if it can not be done securely. 
| 
*/ 

'secure' => env('SESSION_SECURE_COOKIE', false), 

/* 
|-------------------------------------------------------------------------- 
| HTTP Access Only 
|-------------------------------------------------------------------------- 
| 
| Setting this value to true will prevent JavaScript from accessing the 
| value of the cookie and the cookie will only be accessible through 
| the HTTP protocol. You are free to modify this option if needed. 
| 
*/ 

'http_only' => true, 

]; 

ai essayé toutes les options disponibles, mais il n'aide pas.

TIA enter image description here enter image description here

EDIT 1 [Ajout de l'appel AJAX]

HTML

<meta name="csrf-token" content="{{ csrf_token() }}" /> 

AJAX

 submitButton: '#seller_contact button[type="submit"]', 
    submitHandler: function (validator, form, submitButton) { 

     $.ajax({ 
      type: 'POST', 
      headers: { 
       'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
      }, 
      url: '...', 
      data: $(form).serialize(), 
      error: function (xhr, ajaxOptions, thrownError) { 
       alert(xhr.status); 
       alert(xhr.message); 
       alert(xhr.messages); 
       console.log(xhr); 
       alert(thrownError); 
      }, 
      success: function (result) { 
       $("#premium-contact-form").html(result); 
      } 
     }); 
     return false; 
    }, 
+0

Juste par intérêt - avez-vous testé le pilote de session cookie? –

+0

@AaronFahey Désolé je ne suis pas au courant de cela, pouvez-vous s'il vous plaît décrire plus à ce sujet? – silverFoxA

+1

Essayez de changer votre section '.env'' SESSION_DRIVER' et réglez-la sur 'cookie' - je suis simplement intéressé de voir si cela contourne le problème. Cela stocke la session dans un cookie crypté, plutôt que sur le système de fichiers. –

Répondre

0

Essayez d'utiliser le pilote de la session des cookies, en modifiant la section SESSION_DRIVER dans votre fichier .env à cookie. Cela stockera la session de chaque utilisateur dans un cookie chiffré, plutôt que sur le système de fichiers.

+0

Ce qui précède avec https://stackoverflow.com/a/42769727 solution résolu mon problème. Ne pas pourquoi 'file'' SESSION_DRIVER' ne fonctionnait pas – silverFoxA

0

de Essayez d'envoyer _token champ i n demande

let token = $('input[type=hidden]').val(); 
$.post('/...', {_token: token, ...}) 
    .done(function (result) { 
     $("#premium-contact-form").html(result); 
    }) 
    .error(function (xhr, ajaxOptions, thrownError) { 
     alert(xhr.status); 
     alert(xhr.message); 
     alert(xhr.messages); 
     console.log(xhr); 
     alert(thrownError); 
    }); 
+0

La valeur de' token' est passée par 'data: $ (forme) .serialize() 'sérialisation de formulaire – silverFoxA