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?
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);
}
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:
Route::group(array('prefix' => 'api/v2'), function()
{
Route::post('users/valid','UsersController@valid');
});
Votre $except
le tableau ressemble à:
protected $except = ['api/v2/users/valid'];
Route::post('users/valid','UsersController@valid');
Votre $except
le tableau ressemble à:
protected $except = ['users/valid'];
Votre $except
le tableau ressemble à:
protected $except = ['users/*'];
voir: http://laravel.com/docs/master/routing#csrf-excluding-uris
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.
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'
];