0
votes

Méthode de demande de bloc Laravel Block

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.

 Entrez la description de l'image ici p>

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;
  }


2 commentaires

Rubrique ('Access-Control-Autory-Origin: *'); , 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ème


Pouvez-vous nous montrer vos itinéraires s'il vous plaît


3 Réponses :


1
votes

Vérifiez vos itinéraires. On dirait que l'itinéraire / test22 code> avec la méthode postale n'existe pas.

Vous pouvez vérifier en exécutant la commande Artisan aussi pour confirmer. P>

php artisan route:clear


4 commentaires

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 à 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 .



2
votes

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: xxx

à xxx

notez la différence entre les deux consiste à utiliser le message Méthode au lieu de la méthode Obtenir .

update

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 sauf de la propriété du VerifyCsRToken Middleware (non recommandé).

Ou 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 .


4 commentaires

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 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



0
votes

Vous devez déplacer vos itinéraires définis sur API.PHP 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

Pour l'en-tête ('Access-Control-Abed-Origine: *'); , votre navigateur peut vous empêcher d'accepter la réponse de la demande car le * (Joker ) n'est plus supporté par le navigateur moderne.

pour cet essai xxx

ou vous pouvez utiliser BarryVDH / CORL-CORS


3 commentaires

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 . 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.