web-dev-qa-db-fra.com

Dans Laravel 5, comment désactiver le middleware VerifycsrfToken pour un itinéraire spécifique?

J'utilise Laravel 5 pour développer une application. Mon application est connectée à l'API VendHQ et j'ai l'intention d'obtenir des données de VendHQ via leur webhook. Selon leur Documentation =

Lorsqu'un événement se produit et déclenche un webhook, nous envoyons une demande POST à l'URL de votre choix. La demande POST sera dans l'UTF- 8 charset et codage application/x-www-form-urlencoded.

Le problème est que, lorsqu'ils essaient d'envoyer une demande POST à mon Laravel, aucun jeton CSRF n'est ajouté dans leur demande de publication et VerifyCsrfToken le middleware recherche un jeton et finalement il lance un TokenMismatchException.

Ma question est, comment puis-je éviter ce middleware VerifyCsrfToken par défaut pour certains itinéraires spécifiques tout en gardant les autres demandes de publication actives?

24
Ariful Haque

CSRF est activé par défaut sur tous les itinéraires dans Laravel 5, vous pouvez le désactiver pour des itinéraires spécifiques en modifiant app/Http/Middleware/VerifyCsrfToken.php

//app/Http/Middleware/VerifyCsrfToken.php

//add an array of Routes to skip CSRF check
private $openRoutes = ['free/route', 'free/too'];

//modify this function
public function handle($request, Closure $next)
    {
        //add this condition 
    foreach($this->openRoutes as $route) {

      if ($request->is($route)) {
        return $next($request);
      }
    }

    return parent::handle($request, $next);
  }

source

18
Alex Kyriakidis

Dans Laravel 5 cela a un peu gêné. Maintenant, vous pouvez simplement ajouter les routes que vous souhaitez exclure de la vérification csrftoken, dans $except tableau de la classe

'VerifyCsrfToken' (\ app\Http\Middleware\VerifyCsrfToken.php):

class VerifyCsrfToken extends BaseVerifier
{
    protected $except = [
        // Place your URIs here
    ];
}

Exemples:

1. Si vous utilisez un groupe de routes:

Route::group(array('prefix' => 'api/v2'), function()
{
    Route::post('users/valid','UsersController@valid');
});

Votre $except le tableau ressemble à:

protected $except = ['api/v2/users/valid'];

2. Si vous utilisez un itinéraire simple

Route::post('users/valid','UsersController@valid');

Votre $except le tableau ressemble à:

protected $except = ['users/valid'];

3. Si vous souhaitez exclure tous les itinéraires sous l'itinéraire principal (les utilisateurs dans ce cas)

Votre $except le tableau ressemble à:

protected $except = ['users/*'];

voir: http://laravel.com/docs/master/routing#csrf-excluding-uris

47
user3252599

Si vous utilisez la version 5.2, dans: app/Http/Middleware/VerifyCsrfToken.php, vous pouvez ajouter la route à l'attribut: protected $ sauf: Par exemple:

protected $except = [
'users/get_some_info',
];

La partie utilisateurs serait votre contrôleur, "get_some_info" serait l'action. Après avoir effectué cette modification, assurez-vous d'ajouter l'itinéraire dans votre routes.php.

8
Abraham

Ajoutez votre itinéraire à App\Http\Middleware\VerifyCsrfToken.php fichier:

/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'route-name-1', 'route-name-2'
];
3
Sunilspr7