Ich verwende Laravel 5 zum Entwickeln einer App. Meine App ist mit der VendHQ-API verbunden und ich möchte einige Daten von VendHQ über deren Webhook abrufen. Gemäß deren Dokumentation =
Wenn ein Ereignis eintritt und einen Webhook auslöst, senden wir eine POST) - Anfrage an eine URL Ihrer Wahl. Die POST) - Anfrage wird im UTF- 8 Zeichensatz und anwendungs-/x-www-form-urlencodierte Codierung.
Das Problem ist, wenn sie versuchen, eine POST= Anfrage an meine Laravel App zu senden, wird in ihrer Post-Anfrage kein CSRF-Token hinzugefügt und VerifyCsrfToken
Middleware sucht nach einem Token und wirft schließlich ein TokenMismatchException
.
Meine Frage ist, wie kann ich diese standardmäßige VerifyCsrfToken
Middleware für bestimmte Routen vermeiden, während andere Post-Anfragen aktiv bleiben?
CSRF ist standardmäßig auf allen Routen in Laravel 5 aktiviert. Sie können es für bestimmte Routen deaktivieren, indem Sie app/Http/Middleware/VerifyCsrfToken.php ändern
//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);
}
In Laravel 5 hat dies ein wenig nachgelassen. Jetzt können Sie einfach die Routen hinzufügen, die Sie von der Überprüfung durch csrftoken ausschließen möchten, in $except
Array der Klasse
'VerifyCsrfToken' (\ app\Http\Middleware\VerifyCsrfToken.php):
class VerifyCsrfToken extends BaseVerifier
{
protected $except = [
// Place your URIs here
];
}
Beispiele:
Route::group(array('prefix' => 'api/v2'), function()
{
Route::post('users/valid','[email protected]');
});
Ihre $except
Array sieht so aus:
protected $except = ['api/v2/users/valid'];
Route::post('users/valid','[email protected]');
Ihre $except
Array sieht so aus:
protected $except = ['users/valid'];
Ihre $except
Array sieht so aus:
protected $except = ['users/*'];
siehe: http://laravel.com/docs/master/routing#csrf-excluding-uris
Wenn Sie die Version 5.2 verwenden, können Sie in: app/Http/Middleware/VerifyCsrfToken.php die Route zum Attribut hinzufügen: protected $ außer: Zum Beispiel:
protected $except = [
'users/get_some_info',
];
Der Teil der Benutzer wäre Ihr Controller, "get_some_info" wäre die Aktion. Nachdem Sie diese Änderung vorgenommen haben, stellen Sie sicher, dass Sie die Route in Ihrer routes.php hinzufügen.
Fügen Sie Ihre Route zur Datei App\Http\Middleware\VerifyCsrfToken.php
Hinzu:
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'route-name-1', 'route-name-2'
];