Je crée API de Laravel. Mais après avoir défini les en-têtes, la méthode postale n'est pas autorisée.
My Laravel Middleware Code: P>
public function handle($request, Closure $next)
{
header('Access-Control-Allow-Origin:*');
$headers = [
'Access-Control-Allow-Methods' => 'GET, POST, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers' => 'X-Requested-With, Content-Type, Origin, Cache-Control, Pragma, Authorization, Accept, Accept-Encoding'
];
if($request -> getMethod() == 'OPTIONS'){
return response()->json('OK', 200, $headers );
}
$response = $next($request);
foreach($headers as $key => $value){
$response->header($key,$value);
}
return $response;
}
3 Réponses :
Vérifiez vos itinéraires. On dirait que l'itinéraire Vous pouvez vérifier en exécutant la commande Artisan aussi pour confirmer. P> / test22 code> avec la méthode postale n'existe pas. php artisan route:clear
Test22 Existe XD mais la méthode pas XD vient de le changer, mais une erreur suivante se produit
En effet, vous n'avez pas envoyé jeton CSRF. Ajouter @csrf code> à l'intérieur de votre formulaire. Cela devrait fonctionner.
Où exactement je dois insérer CSRF à Laravel? dans le contrôleur? Parce que mon itinéraire test22 est directement sur le contrôleur et il génère une sortie. à Axios, je devrai le mettre dans la tête Ye?
Si vous utilisez Axios, oui, définissez-le dans l'en-tête. Ou vous pouvez l'envoyer comme l'un des paramètres _Token code>.
Vous devez vérifier votre fichier de routes. Le fait que vous obteniez une réponse de 405 et non un 404 signifie que l'itinéraire a été enregistré, mais cela n'accepte pas des demandes postales. La cause la plus probable est que vous avez configuré votre itinéraire pour recevoir des demandes d'obtenir.
Comme vous n'avez pas posté vos itinéraires, je ne peux pas vous donner la solution de code complète, mais cela ressemblerait à changer ce qui suit de Ceci: p> à p> notez la différence entre les deux consiste à utiliser le message La réponse 419 est au fait que vous n'envoyez pas de Jeton CSRF. Vous pouvez exclure l'itinéraire de la vérification CSRF en ajoutant l'itinéraire sur le Ou strong> vous pouvez envoyer via le jeton CSRF dans la demande en tant qu'élément. Vous pouvez trouver plus d'informations sur la façon de faire cela dans le Documentation Laravel ici . p> p> code > Méthode au lieu de la méthode Obtenir code>. p> sauf code> de la propriété du VerifyCsRToken code> Middleware (non recommandé). P>
Vous ne devriez pas utiliser la vérification CSRF dans une API
@ N69S Pourriez-vous s'il vous plaît expliquer pourquoi vous devriez pas i> utiliser la vérification du CSRF dans une API? Cette fonctionnalité de Laravel n'est pas conçue spécifiquement pour les applications à une seule page, elle est plutôt davantage pour les applications qui sont rendues au serveur mais font toujours des demandes Ajax. Une API reposante ne signifie pas nécessairement une API apatride. Vous pouvez toujours faire des demandes Ajax qui utilise le cookie dans le navigateur pour l'authentification plutôt que quelque chose comme un jeton d'accès ou un jeton JWT.
Laravel utilise un jeton API et non CSRF
@Georgehanson repose est par définition STAILLES Transfert d'état de représentation Code>
Vous devez déplacer vos itinéraires définis sur Pour l'en-tête pour cet essai p> ou vous pouvez utiliser BarryVDH / CORL-CORS P> P> API.PHP CODE> où le middleware CSRF in non impliqué qui est logique car il s'agit d'une API et par définition, elles doivent être appelées à partir d'un autre domaine / origine / IP ('Access-Control-Abed-Origine: *'); Code>, votre navigateur peut vous empêcher d'accepter la réponse de la demande car le * code> (Joker ) n'est plus supporté par le navigateur moderne. p>
API peut moi dans le même domaine. Ne doit pas être séparé. S'il vous plaît ne donnez pas de fausses informations.
@Nielslucas Si une API est au même domaine, ce n'est plus une API, mais un WebService d'état code>. Bien sûr, vous pouvez mélanger-max à votre convenance mais ce n'est pas la norme
Laravel utilise un middleware API (jeton API) et non des sessions Web. Donc, il est apatride. Vous pouvez faire la même chose avec une API faite.
Rubrique ('Access-Control-Autory-Origin: *'); code>, le '*' ne fonctionne plus avec la plupart des navigateurs. Vous devez spécifier le domaine autorisé. Vérifiez votre console pour voir si c'est le problèmePouvez-vous nous montrer vos itinéraires s'il vous plaît