2015-12-14 93 views
1

我正在使用Lumen框架。爲流明上的特定路由禁用CSRF TokenMismatch

我有一個外部程序,每2分鐘發送一次HTTP POST請求。

我不需要任何意見,所以我想了解如何禁用Lumen中的CSRF TokenMismatch用於特定路線(我需要在其他某些路線上激活它)?

+0

刪除全局'csrf'中間件和直接從您的控制器或路線中調用它。您也可以傳遞指定包含/排除方法的數組。 – revo

+0

@revo謝謝。是[this](http://laravel.io/forum/11-14-2014-disabling-the-csrf-middleware-in-laravel-5)你在說什麼? – Zl3n

+0

是的,只需從全局中間件中刪除條目並將其添加到路由中間件中即可。那麼你可以讓它具體路線 –

回答

3

您可以擴展VerifyCsrfToken類並將您的路線添加到excludes列表。

這個文件稱爲VerifyCsrfToken.php添加到app/Http/Middleware

<?php namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Session\TokenMismatchException; 

class VerifyCsrfToken extends \Illuminate\Foundation\Http\Middleware\VerifyCsrfToken { 

    protected $except_urls = [ 
     // your excluded URLs go here 
     'example/route', 
    ]; 

    public function handle($request, Closure $next) 
    { 
     $regex = '#' . implode('|', $this->except_urls) . '#'; 

     if ($this->isReading($request) || $this->tokensMatch($request) || preg_match($regex, $request->path())) 
     { 
      return $this->addCookieToResponse($request, $next($request)); 
     } 

     throw new TokenMismatchException; 
    } 

} 

然後中間件添加到bootstrap/app.php文件。你必須取消註釋$app->middleware()然後將其添加到它:

$app->routeMiddleware([ 
'csrf' => 'Laravel\Lumen\Http\Middleware\VerifyCsrfToken', 
]); 
+0

這是一個很好的答案。謝謝。讓我試試 – Zl3n

+0

是的,這就是我們在評論中討論的方式 –

+0

這是關於這個http://laravel.com/docs/5.1/routing#csrf-excluding-uris –