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

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

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

2019-04-08 10:04:10 10862

進(jìn)行 post 或 put 等方法提交表單的時(shí)候,laravel 會(huì)提示錯(cuò)誤TokenMismatchException 這是因?yàn)閘aravel開(kāi)啟了防csrf。要解決該問(wèn)題有兩種方式,一種是在表單中填寫(xiě)token驗(yàn)證,另一種是在防CSRF時(shí)排除所請(qǐng)求的路由


開(kāi)啟csrf_token

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


<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保護(hù)url

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


protected $except = [

    'posts',

    'posts/*'

];

注意方法二將無(wú)法對(duì)photo相關(guān)路由進(jìn)行CSRF防護(hù),所以請(qǐng)根據(jù)實(shí)際情況選擇


關(guān)閉csrf保護(hù)

當(dāng)我們不想啟用框架自帶的csrf防護(hù)的時(shí)候,進(jìn)入:laravel/app/Middleware/VerifyCsrfToken.php 找到csrf的中間件,修改代碼如下


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

    // 使用CSRF

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

    // 禁用CSRF

    //return $next($request);

}

有的時(shí)候我們既需要開(kāi)啟CSRF防護(hù),又需要在一些特性的post請(qǐng)求時(shí)不帶csrf_token(),laravel框架為我們提供了一個(gè)特殊的屬性。


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來(lái)進(jìn)行路由過(guò)濾。在我們except中的是我們不想被防護(hù)的路由名稱。此處的upload和rsa_post,都是我需要post方式訪問(wèn)的路由。


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

這條文檔是否有幫助解決問(wèn)題?

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

在文檔使用中是否遇到以下問(wèn)題: