[英]Converting beforeFilter (4.*) to Middleware (5.*) in Laravel
最近,我一直在嘗試學習與Laravel合作。 大多數教程都在4.*
,但這沒關系。 到目前為止,實現/轉換一些廢棄的功能還可以。 我發現版本5.*
已棄用beforeFilter
如下所示:
public function __construct() {
$this->beforeFilter('csrf', array('on' => ['post', 'put', 'patch', 'delete']));
}
我想將其轉換為版本5.*
。 據我了解,這可以通過中間件來完成,但是我不知道如何實現相同的結果。 我已經閱讀了文檔,但這並沒有真正幫助我理解該主題。
app/Http/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 = [
//
];
}
誰能指導我進行設置並幫助我更好地理解中間件? 謝謝。
由於CSRF保護是Laravel 5捆綁提供的,因此實際上,它默認情況下會在您看到在VerifyCsrfToken.php
中擴展的Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken
類中進行VerifyCsrfToken.php
。
如果您查看該類的handle
方法,您將看到使驗證成功的第一個條件將調用isReading
方法,如下所示:
/**
* Determine if the HTTP request uses a ‘read’ verb.
*
* @param \Illuminate\Http\Request $request
* @return bool
*/
protected function isReading($request)
{
return in_array($request->method(), ['HEAD', 'GET', 'OPTIONS']);
}
這與您在Laravel 4中的beforeFilter
等效,因此允許執行請求以“讀取”動詞,並在使用其他動詞(例如post
, put
, patch
, delete
自動驗證令牌。
如果查看Laravel CSRF保護文檔,您會看到有一段文字:
您無需在POST,PUT或DELETE請求上手動驗證CSRF令牌。 VerifyCsrfToken HTTP中間件將驗證請求輸入中的令牌是否與會話中存儲的令牌匹配。
因此,您不再需要該過濾器。 至於了解中間件在Laravel中的工作方式,請閱讀整個HTTP中間件文檔,這將有助於您了解其工作原理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.