J'essaie de créer une API reposante en utilisant laravel et créer mon contrôleur en utilisant php artisan make: contrôleur RestController et voici mon code de contrôleur:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class RestController extends Controller
{
private $arr = array(
array("name"=>"jon", "family"=>"doe"),
array("name"=>"jhon", "family" => "doue")
);
public function index(){
return json_encode($this->arr);
}
public function store(Request $request){
return "oops!!";
}
public function update (Request $request, $id){
return "test";
}
}
et j'ajoute cette ligne de code pour créer cette route dans mon fichier routes/web.php
Route::resource('person', 'RestController');
lorsque j'essaie de tester cette API sur GET/personne, cela fonctionne bien, mais sur post et mis, je reçois le code de statut 419 de laravel.
si vous développez un repos apis, il est préférable de ne pas ajouter de jeton .si vous utilisez 5.4 ou 5.5, vous pouvez utiliser api.php au lieu de web.php. Dans api.php, vous n'avez pas besoin de la vérification de jeton sur une requête ultérieure.
si vous utilisez web.php, alors vous êtes excusez-vous. Voici la documentation officielle
Exclusion des URI de la protection CSRF
Parfois, vous souhaiterez peut-être exclure un ensemble d’URI de la protection CSRF. Par exemple, si vous utilisez Stripe pour traiter des paiements et utilisez son système webhook, vous devez exclure votre itinéraire de gestionnaire de compte Web Stripe de la protection CSRF, car Stripe ne saura pas quel jeton CSRF envoyer sur vos itinéraires.
En règle générale, vous devez placer ces types de routes en dehors du groupe de middleware Web que RouteServiceProvider applique à toutes les routes du fichier routes/web.php. Cependant, vous pouvez également exclure les routes en ajoutant leurs URI à la propriété $ except du middleware VerifyCsrfToken:
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'stripe/*',
];
}
pour référence
Selon ma connaissance, il existe deux méthodes pour résoudre ce problème
Méthode 1: - Ajouter un jeton CsrF
Méthode 2: - Exclure les URI de la protection CSRF
Comment utiliser
Méthode 1: - Ajoutez une autre variable à votre demande POST.
"_token": "{{ csrf_token() }}"
Exemple pour Ajax
req = $.ajax({
type: "POST",
url: "/search",
data: {'key' : 'value',
"_token": "{{ csrf_token() }}",},
dataType: "text",
success: function(msg){
}
});
Exemple si vous utilisez des formulaires
<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">
Méthode 2 Il y a un fichier nommé 'VerifyCsrfToken' à l'emplacement suivant
yourProjectDirectory --> app->Http--> Middleware
Ajoutez votre URL dans la méthode suivante
protected $except = [
'url1/',
'url2/',
];
Quand utiliser
Si vous êtes le propriétaire (contrôle total) de l'API, utilisez la méthode 1, car CSRF TOKEN ajoute la sécurité à votre application.
Si vous ne parvenez pas à ajouter de jeton CSRF comme dans le cas où vous utilisez des API, des Webhooks, etc. de tiers, utilisez la Méthode 2.