Vue + Laravel Sanctum rencontre une erreur 419 avec une incompatibilité de jeton CSRF
<p>J'ai reçu une erreur « 419 (État inconnu) » avec le message d'erreur « Incompatibilité de jeton CSRF. »</p>
<p>POST http://127.0.0.1:8000/login 419 (statut inconnu)</p>
<p>Le jeton CSRF ne correspond pas.</p>
<p>Laravel服务器:http://127.0.0.1:8000</p>
<p>Vue服务器:http://localhost:8080</p>
<p>应用程序/Http/Kernel.php</p>
<pre class="lang-php Prettyprint-override"><code>'api' => [
LaravelSanctumHttpMiddlewareEnsureFrontendRequestsAreStateful::class,
'accélérateur:api',
IlluminateRoutingMiddlewareSubstituteBindings::class,
],
</code></pre>
<p>应用程序/模型/User.php</p>
<pre class="lang-php Prettyprint-override"><code><?php
Modèles d'application d'espace de noms ;
utilisez IlluminateDatabaseEloquentFactoriesHasFactory ;
utilisez IlluminateNotificationsNotifiable ;
utilisez LaravelSanctumHasApiTokens ;
L'utilisateur de classe étend Authenticatable
{
utilisez HasApiTokens, HasFactory, Notifiable ;
//...
}
</code></pre>
<p>配置/cors.php</p>
<pre class="lang-php Prettyprint-override"><code><?php
retour [
'chemins' => [
'API/*',
'sanctum/csrf-cookie',
'registre',
'se connecter',
],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => vrai,
];
</code></pre>
<p>.env</p>
<pre class="brush:php;toolbar:false;">SESSION_DRIVER=cookie
SESSION_DOMAIN=hôte local
SANCTUM_STATEFUL_DOMAINS=localhost:8080</pre>
<p>src/main.js</p>
<pre class="lang-js Prettyprint-override"><code>axios.interceptors.request.use((config) => {
config.baseURL = 'http://127.0.0.1:8000'
config.withCredentials = vrai
retourner la configuration
})
</code></pre>
<p>src/views/auth/Login.vue</p>
<pre class="lang-js Prettyprint-override"><code> importer des axios depuis 'axios'
importer { réactif } depuis '@vue/reactivity' ;
exporter par défaut {
installation() {
informations d'identification const = réactif ({
e-mail: '',
mot de passe: '',
})
const login = async () => {
axios.get('/sanctum/csrf-cookie').then( async() => {
let réponse = attendre axios.post('/login', informations d'identification)
console.log(réponse);
});
}
return { login, identifiant }
}
} ;
</code></pre></p>