簡體   English   中英

在Laravel中將beforeFilter(4. *)轉換為中間件(5. *)

[英]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等效,因此允許執行請求以“讀取”動詞,並在使用其他動詞(例如postputpatchdelete自動驗證令牌。

如果查看Laravel CSRF保護文檔,您會看到有一段文字:

您無需在POST,PUT或DELETE請求上手動驗證CSRF令牌。 VerifyCsrfToken HTTP中間件將驗證請求輸入中的令牌是否與會話中存儲的令牌匹配。

因此,您不再需要該過濾器。 至於了解中間件在Laravel中的工作方式,請閱讀整個HTTP中間件文檔,這將有助於您了解其工作原理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM