国产欧美日韩第一页|日本一二三不卡视频|在线精品小视频,亚洲第一免费播放区,metcn人体亚洲一区,亚洲精品午夜视频

幫助中心 >  技術知識庫 >  網(wǎng)站相關 >  程序開發(fā) >  Laravel 5 出現(xiàn)錯誤 TokenMismatchException in VerifyCsrfToken.php

Laravel 5 出現(xiàn)錯誤 TokenMismatchException in VerifyCsrfToken.php

2019-04-08 10:04:10 10861

進行 post 或 put 等方法提交表單的時候,laravel 會提示錯誤TokenMismatchException 這是因為laravel開啟了防csrf。要解決該問題有兩種方式,一種是在表單中填寫token驗證,另一種是在防CSRF時排除所請求的路由


開啟csrf_token

在表單中加上laravel自帶的全局幫助函數(shù)csrf_token()。提交表單的時候會自動帶上laravel生成的csrf_token()的值,然后在訪問路由的時候laravel會判斷這個值。


<form action="/posts" method="post">

    <input type='hidden' name='csrf_token' value="{{csrf_token()}}">

    <input type="submit" name="提交" />

</form>

或者使用


<form action="/posts" method="post">

    {{csrf_field()}}

    <input type="submit" name="提交" />

</form>

如果使用 ajax 提交的話


<head>

    <title>Laravel 5</title>

    <meta name="csrf-token" content="{{ csrf_token() }}">

</head>

<script>

$.ajax({

    headers: {

        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 

    }, 

    url: "{{url('/rsa_post')}}",

    type: "post", 

    dataType: "json",

    data: {key: 'value'},

    success: function(data){

    }

}, 'json');

</script>

排除csrf保護url

比如要訪問的url為 http://www.tjdsmy.cn/posts 現(xiàn)在想排除 posts 相關資源路由,則在App\\Http\\Middleware\\VerifyCsrfToken::class 中添加路由如下:


protected $except = [

    'posts',

    'posts/*'

];

注意方法二將無法對photo相關路由進行CSRF防護,所以請根據(jù)實際情況選擇


關閉csrf保護

當我們不想啟用框架自帶的csrf防護的時候,進入:laravel/app/Middleware/VerifyCsrfToken.php 找到csrf的中間件,修改代碼如下


public function handle($request, Closure $next){

    // 使用CSRF

    return parent::handle($request, $next);

    // 禁用CSRF

    //return $next($request);

}

有的時候我們既需要開啟CSRF防護,又需要在一些特性的post請求時不帶csrf_token(),laravel框架為我們提供了一個特殊的屬性。


class VerifyCsrfToken extends BaseVerifier {

    /**

     * The URIs that should be excluded from CSRF verification.

     *

     * @var array

     */

    protected $except = [ // 'upload', 'rsa_post', ];

    /*  public function handle($request, Closure $next)

    {

        // 使用CSRF

            return parent::handle($request, $next);

        // 禁用CSRF

        //return $next($request);

    }*/

}

這段代碼的意思是利用except來進行路由過濾。在我們except中的是我們不想被防護的路由名稱。此處的upload和rsa_post,都是我需要post方式訪問的路由。


提交成功!非常感謝您的反饋,我們會繼續(xù)努力做到更好!

這條文檔是否有幫助解決問題?

非常抱歉未能幫助到您。為了給您提供更好的服務,我們很需要您進一步的反饋信息:

在文檔使用中是否遇到以下問題: