{"id":903,"date":"2025-06-12T02:24:03","date_gmt":"2025-06-11T18:24:03","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/903.html"},"modified":"2025-06-12T02:24:03","modified_gmt":"2025-06-11T18:24:03","slug":"%e5%9c%a8laravel%e4%b8%ad%e5%a4%84%e7%90%86tokenmismatchexception%ef%bc%9a%e5%ae%9e%e7%94%a8%e6%8c%87%e5%8d%97","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/903.html","title":{"rendered":"\u5728Laravel\u4e2d\u5904\u7406TokenMismatchException\uff1a\u5b9e\u7528\u6307\u5357"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#26631;&#39064;&#65306;&#22312;Laravel&#20013;&#22788;&#29702;TokenMismatchException&#65306;&#23454;&#29992;&#25351;&#21335;<\/p>\n<p><code>TokenMismatchException<\/code>&#26159;Laravel&#26694;&#26550;&#20013;&#24120;&#35265;&#30340;&#38169;&#35823;&#20043;&#19968;&#65292;&#23427;&#34920;&#31034;&#35831;&#27714;&#20013;&#30340;&#20196;&#29260;&#65288;token&#65289;&#19982;&#26381;&#21153;&#22120;&#31471;&#23384;&#20648;&#30340;&#20196;&#29260;&#19981;&#21305;&#37197;&#12290;&#36825;&#20010;&#24322;&#24120;&#36890;&#24120;&#21457;&#29983;&#22312;&#29992;&#25143;&#23581;&#35797;&#36890;&#36807;POST&#12289;PUT&#31561;&#26041;&#27861;&#25552;&#20132;&#34920;&#21333;&#26102;&#12290;<\/p>\n<h3>&#21407;&#22240;&#20998;&#26512;<\/h3>\n<ol>\n<li><strong>&#23458;&#25143;&#31471;&#29983;&#25104;&#30340;Token&#26410;&#27491;&#30830;&#20256;&#36882;<\/strong>&#65306;&#24403;&#29992;&#25143;&#36890;&#36807;JavaScript&#29983;&#25104;&#24182;&#38468;&#21152;&#21040;&#34920;&#21333;&#20013;&#26102;&#65292;&#30830;&#20445;&#36825;&#20123;Token&#34987;&#27491;&#30830;&#22320;&#20256;&#36882;&#21040;&#26381;&#21153;&#22120;&#12290;<\/li>\n<li><strong>&#26381;&#21153;&#22120;&#31471;&#27809;&#26377;&#27491;&#30830;&#39564;&#35777;Token<\/strong>&#65306;&#22312;&#22788;&#29702;&#34920;&#21333;&#25552;&#20132;&#26102;&#65292;&#26381;&#21153;&#22120;&#38656;&#35201;&#26816;&#26597;&#20256;&#20837;&#30340;Token&#26159;&#21542;&#19982;&#23384;&#20648;&#22312;&#25968;&#25454;&#24211;&#20013;&#30340;Token&#19968;&#33268;&#12290;<\/li>\n<\/ol>\n<h3>&#35299;&#20915;&#26041;&#26696;<\/h3>\n<h4>1. &#20351;&#29992;CSRF&#20445;&#25252;<\/h4>\n<p>Laravel&#25552;&#20379;&#20102;&#19968;&#31181;&#20869;&#32622;&#30340;CSRF&#20445;&#25252;&#26426;&#21046;&#65292;&#21487;&#20197;&#33258;&#21160;&#20026;&#25152;&#26377;POST&#12289;PUT&#21644;DELETE&#35831;&#27714;&#28155;&#21152;Token&#23383;&#27573;&#65292;&#24182;&#36827;&#34892;&#26657;&#39564;&#12290;<\/p>\n<pre><code class=\"language-php\">\/\/ &#22312;&#25511;&#21046;&#22120;&#20013;&#20351;&#29992;CSRF&#20445;&#25252;\nuse IlluminateHttpRequest;\nuse AppHttpControllersController;\n\nclass ExampleController extends Controller\n{\n    public function store(Request $request)\n    {\n        \/\/ CSRF Token&#24050;&#33258;&#21160;&#28155;&#21152;&#21040;&#35831;&#27714;&#20013;\n        $request-&gt;validate([\n            'name' =&gt; 'required|string|max:255',\n        ]);\n\n        \/\/ &#22788;&#29702;&#25968;&#25454;\n        return response()-&gt;json(['message' =&gt; 'Data saved successfully']);\n    }\n}<\/code><\/pre>\n<h4>2. &#25163;&#21160;&#28155;&#21152;Token<\/h4>\n<p>&#22914;&#26524;&#20320;&#19981;&#24819;&#20351;&#29992;CSRF&#20445;&#25252;&#65292;&#20063;&#21487;&#20197;&#25163;&#21160;&#28155;&#21152;Token&#21040;&#34920;&#21333;&#20013;&#12290;<\/p>\n<pre><code class=\"language-html\">&lt;form action=\"\/submit\" method=\"post\"&gt;\n    @csrf\n    &lt;input type=\"text\" name=\"name\" value=\"\"&gt;\n    &lt;button type=\"submit\"&gt;Submit&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<h4>3. &#39564;&#35777;Token<\/h4>\n<p>&#22312;&#22788;&#29702;&#34920;&#21333;&#25552;&#20132;&#26102;&#65292;&#30830;&#20445;&#20256;&#20837;&#30340;Token&#19982;&#23384;&#20648;&#22312;&#25968;&#25454;&#24211;&#20013;&#30340;Token&#19968;&#33268;&#12290;<\/p>\n<pre><code class=\"language-php\">public function store(Request $request)\n{\n    \/\/ &#26816;&#26597;Token&#26159;&#21542;&#19968;&#33268;\n    if ($request-&gt;session()-&gt;has('token') &amp;&amp; $request-&gt;session()-&gt;get('token') === $request-&gt;header('X-CSRF-TOKEN')) {\n        $request-&gt;validate([\n            'name' =&gt; 'required|string|max:255',\n        ]);\n\n        \/\/ &#22788;&#29702;&#25968;&#25454;\n        return response()-&gt;json(['message' =&gt; 'Data saved successfully']);\n    } else {\n        throw new IlluminateSessionTokenMismatchException;\n    }\n}<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20197;&#19979;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#31034;&#20363;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312;Laravel&#20013;&#22788;&#29702;TokenMismatchException&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppHttpControllers;\n\nuse IlluminateHttpRequest;\nuse IlluminateSupportFacadesValidator;\nuse IlluminateSupportFacadesSession;\n\nclass ExampleController extends Controller\n{\n    public function store(Request $request)\n    {\n        \/\/ &#26816;&#26597;Token&#26159;&#21542;&#19968;&#33268;\n        if ($request-&gt;session()-&gt;has('token') &amp;&amp; $request-&gt;session()-&gt;get('token') === $request-&gt;header('X-CSRF-TOKEN')) {\n            $request-&gt;validate([\n                'name' =&gt; 'required|string|max:255',\n            ]);\n\n            \/\/ &#22788;&#29702;&#25968;&#25454;\n            return response()-&gt;json(['message' =&gt; 'Data saved successfully']);\n        } else {\n            throw new IlluminateSessionTokenMismatchException;\n        }\n    }\n\n    public function test()\n    {\n        \/\/ &#35774;&#32622;Token\n        Session::put('token', uniqid());\n\n        \/\/ &#21457;&#36865;&#34920;&#21333;&#35831;&#27714;\n        $response = request()-&gt;post('\/submit');\n\n        \/\/ &#36755;&#20986;&#21709;&#24212;\n        echo $response;\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#31034;&#20363;&#20013;&#65292;&#25105;&#20204;&#39318;&#20808;&#35774;&#32622;&#20102;&#19968;&#20010;&#38543;&#26426;&#30340;Token&#65292;&#28982;&#21518;&#22312;&#34920;&#21333;&#25552;&#20132;&#26102;&#26816;&#26597;&#20256;&#20837;&#30340;Token&#26159;&#21542;&#19968;&#33268;&#12290;&#22914;&#26524;&#19968;&#33268;&#65292;&#21017;&#22788;&#29702;&#25968;&#25454;&#65307;&#22914;&#26524;&#19981;&#19968;&#33268;&#65292;&#21017;&#25243;&#20986;<code>TokenMismatchException<\/code>&#12290;<\/p>\n<p>&#24076;&#26395;&#36825;&#33021;&#24110;&#21161;&#20320;&#22312;Laravel&#20013;&#26377;&#25928;&#22320;&#22788;&#29702;TokenMismatchException&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#27010;&#35272;<\/h2><p>&#23545;&#19981;&#36215;&#65292;&#24744;&#30340;&#20449;&#24687;&#19981;&#23436;&#25972;&#12290;&#35831;&#25552;&#20379;&#26356;&#22810;&#30340;&#19978;&#19979;&#25991;&#25110;&#38382;&#39064;&#12290;<code>TokenMismatchException<\/code>&#22312;Laravel&#20013;&#65292;&#22788;&#29702;&#34920;&#21333;&#25552;&#20132;&#12289;AJAX&#35831;&#27714;&#21644;CSRF&#20445;&#25252;&#26102;&#36935;&#21040;&#30340;&#26368;&#24120;&#35265;&#30340;&#38382;&#39064;&#20043;&#19968;&#23601;&#26159;&#20250;&#35805;&#20196;&#29260;&#19982;&#35831;&#27714;&#20013;&#25552;&#20379;&#30340;&#20196;&#29260;&#19981;&#21305;&#37197;&#30340;&#24773;&#20917;&#12290;&#24403;&#27492;&#24322;&#24120;&#34987;&#25243;&#20986;&#26102;&#65292;&#34920;&#31034;&#23384;&#22312;&#36825;&#31181;&#19981;&#21305;&#37197;&#12290;&#22312;&#36825;&#31687;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#25506;&#35752;&#22312;Laravel&#24212;&#29992;&#20013;&#26377;&#25928;&#22788;&#29702;&#36825;&#20123;&#24322;&#24120;&#30340;&#20855;&#20307;&#27493;&#39588;&#12290;<\/p><h2>&#29702;&#35299;Laravel&#20013;&#30340;CSRF&#20196;&#29260;<\/h2><p>&#36328;&#31449;&#35831;&#27714;&#20266;&#36896;&#65288;CSRF&#65289;&#20196;&#29260;&#22312;&#30830;&#20445;&#24744;&#30340;Laravel&#24212;&#29992;&#31243;&#24207;&#20813;&#21463;&#26410;&#32463;&#25480;&#26435;&#30340;&#34920;&#21333;&#25552;&#20132;&#25915;&#20987;&#26041;&#38754;&#33267;&#20851;&#37325;&#35201;&#12290;Laravel&#33258;&#21160;&#20026;&#27599;&#20010;&#27963;&#21160;&#29992;&#25143;&#20250;&#35805;&#29983;&#25104;&#19968;&#20010;CSRF&#20196;&#29260;&#12290;&#35813;&#20196;&#29260;&#29992;&#20110;&#39564;&#35777;&#24050;&#35748;&#35777;&#30340;&#29992;&#25143;&#30830;&#23454;&#26159;&#23454;&#38469;&#21457;&#36215;&#23545;&#24212;&#29992;&#35831;&#27714;&#30340;&#29992;&#25143;&#12290;<\/p><pre><code>{{ csrf_field() }}<\/code><\/pre><p>&#22312;&#24744;&#30340;HTML&#34920;&#21333;&#20013;&#21253;&#21547;&#19978;&#36848;&#22768;&#26126;&#20197;&#23884;&#20837;&#19968;&#20010;&#38544;&#34255;&#30340;&#36755;&#20837;&#23383;&#27573;&#65292;&#35813;&#23383;&#27573;&#23384;&#20648;&#24403;&#21069;&#30340;CSRF&#20196;&#29260;&#12290;<\/p><h2>&#22788;&#29702;&#20196;&#29260;&#36807;&#26399;&#38382;&#39064;<\/h2><p>&#24403;&#29992;&#25143;&#22312;&#34920;&#21333;&#39029;&#38754;&#20572;&#30041;&#26102;&#38388;&#36807;&#38271;&#32780;&#26410;&#25552;&#20132;&#26102;&#65292;&#21487;&#33021;&#20250;&#23548;&#33268;CSRF&#20196;&#29260;&#36807;&#26399;&#65292;&#20174;&#32780;&#24341;&#21457;&#38382;&#39064;&#12290;<code>TokenMismatchException<\/code>&#19968;&#31181;&#22788;&#29702;&#26041;&#27861;&#26159;&#25552;&#20379;&#29992;&#25143;&#21451;&#22909;&#30340;&#21453;&#39304;&#21644;&#37325;&#26032;&#25552;&#20132;&#34920;&#21333;&#30340;&#26426;&#20250;&#12290;<\/p><pre><code>\/\/ Inside the Exception Handler (app\/Exceptions\/Handler.php)\n\npublic function render($request, Exception $exception)\n{\n    if ($exception instanceof IlluminateSessionTokenMismatchException) {\n        return redirect()-&gt;back()-&gt;withInput($request-&gt;except('password'))-&gt;withErrors(['token' =&gt; 'Sorry, your session has expired. Please try again.']);\n    }\n\n    return parent::render($request, $exception);\n}\n<\/code><\/pre><h2>&#25490;&#38500;CSRF&#20445;&#25252;&#30340;&#36335;&#30001;<\/h2><p>&#26377;&#26102;&#65292;&#20320;&#38656;&#35201;&#20026;&#29305;&#23450;&#30340;&#36335;&#30001;&#31105;&#29992;CSRF&#20445;&#25252;&#65292;&#29305;&#21035;&#26159;&#22312;&#22788;&#29702;&#31532;&#19977;&#26041;&#26381;&#21153;&#25110;API&#26102;&#12290;&#20320;&#21487;&#20197;&#36890;&#36807;&#28155;&#21152;&#36825;&#20123;&#36335;&#30001;&#26469;&#25490;&#38500;&#23427;&#20204;&#12290;<code>$except<\/code>&#25968;&#32452;&#22312;&#12290;<code>VerifyCsrfToken<\/code>&#20013;&#38388;&#20214;&#12290;<\/p><pre><code>\/\/ Inside VerifyCsrfToken middleware (app\/Http\/Middleware\/VerifyCsrfToken.php)\n\nprotected $except = [\n    'webhook\/*',\n];\n<\/code><\/pre><h2>&#22312;AJAX&#35831;&#27714;&#20013;&#20351;&#29992;CSRF&#20196;&#29260;&#12290;<\/h2><p>&#20351;&#29992;JavaScript&#24211;&#22914;jQuery&#25110;Axios&#36827;&#34892;AJAX&#35831;&#27714;&#26102;&#65292;&#38656;&#35201;&#30830;&#20445;&#22312;HTTP&#22836;&#37096;&#20013;&#21253;&#21547;CSRF&#20196;&#29260;&#12290;<\/p><pre><code>\/\/ Add an X-CSRF-TOKEN header for AJAX requests\n\n$.ajaxSetup({\n    headers: {\n        'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')\n    }\n});\n<\/code><\/pre><p>&#20363;&#22914;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;Laravel&#20869;&#32622;&#30340;JavaScript&#36741;&#21161;&#20989;&#25968;&#65306;<\/p><pre><code>window.axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name=\"csrf-token\"]').getAttribute('content');\n<\/code><\/pre><h2>&#33258;&#23450;&#20041;&#24322;&#24120;&#22788;&#29702;&#23545;&#20110;API&#36335;&#30001;<\/h2><p>&#22312;&#26500;&#24314;API&#26102;&#65292;&#22914;&#26524;&#20320;&#19981;&#37325;&#23450;&#21521;&#29992;&#25143;&#65292;&#37027;&#20040;&#20320;&#38656;&#35201;&#22788;&#29702;&#30340;&#24773;&#20917;&#26159;&#65306;<code>TokenMismatchException<\/code>&#19981;&#21516;&#30340;&#12290;&#23545;&#20110;API&#65292;&#24744;&#36890;&#24120;&#36820;&#22238;&#19968;&#20010;JSON&#21709;&#24212;&#34920;&#31034;&#22833;&#36133;&#12290;<\/p><pre><code>\/\/ Inside the Exception Handler (app\/Exceptions\/Handler.php)\n\npublic function render($request, Exception $exception)\n{\n    if ($exception instanceof IlluminateSessionTokenMismatchException) {\n        return response()-&gt;json(['error' =&gt; 'token_expired'], 401);\n    }\n\n    return parent::render($request, $exception);\n}\n<\/code><\/pre><h2>&#39057;&#32321;&#30340;&#20196;&#29260;&#26356;&#26032;<\/h2><p>&#22914;&#26524;&#24744;&#30340;&#24212;&#29992;&#22312;&#29992;&#25143;&#25552;&#20132;&#25968;&#25454;&#21069;&#38656;&#35201;&#33457;&#36153;&#22823;&#37327;&#26102;&#38388;&#30340;&#21306;&#22495;&#65292;&#24314;&#35758;&#24744;&#23450;&#26399;&#26356;&#26032;&#20196;&#29260;&#12290;&#24744;&#21487;&#20197;&#20351;&#29992;<code>setTimeout()<\/code>&#32467;&#21512;&#19968;&#20010;&#19982;AJAX&#35843;&#29992;&#30456;&#20851;&#30340;&#21047;&#26032;CSRF&#20196;&#29260;&#30340;&#33258;&#23450;&#20041;&#36335;&#30001;&#12290;<\/p><pre><code>route.get('\/refresh-csrf', function(){\n    return response()-&gt;json(['csrfToken' =&gt; csrf_token()]);\n});\n<\/code><\/pre><h2>&#27491;&#22312;&#23581;&#35797;&#33719;&#21462;TokenMismatchException&#30340;&#26085;&#24535;&#20449;&#24687;&#12290;<\/h2><p>&#35760;&#24405;&#24322;&#24120;&#24773;&#20917;&#23545;&#20110;&#20102;&#35299;&#29992;&#25143;&#39057;&#32321;&#36935;&#21040;&#36807;&#26399;&#20196;&#29260;&#30340;&#39057;&#29575;&#26159;&#38750;&#24120;&#26377;&#20215;&#20540;&#30340;&#12290;<\/p><pre><code>\/\/ Modify render method in app\/Exceptions\/Handler.php\n\npublic function render($request, Exception $exception)\n{\n    if ($exception instanceof IlluminateSessionTokenMismatchException) {\n        Log::warning('TokenMismatchException for user with ID ' . $request-&gt;user()-&gt;id);\n        \/\/ rest of the handling...\n    }\n\n    return parent::render($request, $exception);\n}\n<\/code><\/pre><h2>&#32467;&#35770;<\/h2><p>&#27491;&#30830;&#22788;&#29702;<code>TokenMismatchException<\/code>&#22312;Laravel&#20013;&#65292;&#24744;&#30340;&#24212;&#29992;&#31243;&#24207;&#21464;&#24471;&#26356;&#21152;&#22362;&#22266;&#19988;&#29992;&#25143;&#21451;&#22909;&#12290;&#36890;&#36807;&#24212;&#29992;&#26412;&#25945;&#31243;&#35752;&#35770;&#30340;&#31574;&#30053;&#65292;&#24744;&#21487;&#20197;&#30830;&#20445;CSRF&#20445;&#25252;&#26426;&#21046;&#19981;&#20250;&#26080;&#25925;&#24178;&#25200;&#29992;&#25143;&#20307;&#39564;&#65292;&#24182;&#36866;&#24212;&#24744;Laravel&#24212;&#29992;&#31243;&#24207;&#30340;&#19981;&#21516;&#22330;&#26223;&#12290;&#22987;&#32456;&#29282;&#35760;&#35201;&#20180;&#32454;&#27979;&#35797;&#20197;&#30830;&#20445;&#24744;&#24688;&#24403;&#22320;&#24179;&#34913;&#23433;&#20840;&#24615;&#21644;&#26131;&#29992;&#24615;&#12290;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p><code>TokenMismatchException<\/code>&#26159;Laravel&#26694;&#26550;&#20013;&#30340;&#19968;&#20010;&#24322;&#24120;&#31867;&#22411;&#65292;&#23427;&#36890;&#24120;&#21457;&#29983;&#22312;&#23581;&#35797;&#20174;&#26410;&#25480;&#26435;&#30340;&#26469;&#28304;&#35775;&#38382;&#36164;&#28304;&#26102;&#12290;&#35201;&#35299;&#20915;&#36825;&#20010;&#38382;&#39064;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;Laravel&#25552;&#20379;&#30340;&#35299;&#20915;&#26041;&#26696;&#12290;<\/p>\n<h3>&#38382;&#39064;&#27010;&#36848;<\/h3>\n<p>&#24403;&#25910;&#21040;<code>TokenMismatchException<\/code>&#26102;&#65292;&#21487;&#33021;&#26159;&#30001;&#20110;&#20197;&#19979;&#21407;&#22240;&#65306;<\/p>\n<ol>\n<li><strong>&#26435;&#38480;&#39564;&#35777;&#22833;&#36133;<\/strong>&#65306;&#29992;&#25143;&#27809;&#26377;&#36275;&#22815;&#30340;&#26435;&#38480;&#26469;&#35775;&#38382;&#35831;&#27714;&#30340;&#36164;&#28304;&#12290;<\/li>\n<li><strong>&#35748;&#35777;&#36807;&#31243;&#38169;&#35823;<\/strong>&#65306;&#26381;&#21153;&#22120;&#26410;&#33021;&#27491;&#30830;&#22788;&#29702;&#29992;&#25143;&#30340;&#20196;&#29260;&#12290;<\/li>\n<\/ol>\n<h3>&#35299;&#20915;&#26041;&#26696;<\/h3>\n<h4>&#20351;&#29992;JWT&#65288;JSON Web Tokens&#65289;<\/h4>\n<ul>\n<li>\n<p><strong>&#20248;&#28857;<\/strong>&#65306;<\/p>\n<ul>\n<li>&#31616;&#21270;&#20102;&#36523;&#20221;&#39564;&#35777;&#27969;&#31243;&#65292;&#29305;&#21035;&#26159;&#23545;&#20110;&#38656;&#35201;&#39057;&#32321;&#26356;&#26032;&#25110;&#20462;&#25913;&#23494;&#30721;&#30340;&#24212;&#29992;&#31243;&#24207;&#12290;<\/li>\n<li>&#25552;&#20379;&#20102;&#19968;&#31181;&#23433;&#20840;&#30340;&#26041;&#24335;&#26469;&#31649;&#29702;&#29992;&#25143;&#30340;&#36523;&#20221;&#20449;&#24687;&#21644;&#26435;&#38480;&#12290;<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>&#22914;&#20309;&#20351;&#29992;<\/strong>&#65306;<\/p>\n<ol>\n<li>&#22312;&#24212;&#29992;&#31243;&#24207;&#20013;&#37197;&#32622;JWT&#29983;&#25104;&#22120;&#12290;<\/li>\n<li>&#22312;&#38656;&#35201;&#35775;&#38382;&#25935;&#24863;&#25968;&#25454;&#25110;&#25191;&#34892;&#29305;&#23450;&#25805;&#20316;&#20043;&#21069;&#65292;&#26816;&#26597;&#24403;&#21069;&#29992;&#25143;&#26159;&#21542;&#20855;&#26377;&#25152;&#38656;&#30340;&#26435;&#38480;&#12290;<\/li>\n<li>&#22914;&#26524;&#27809;&#26377;&#36866;&#24403;&#30340;&#26435;&#38480;&#65292;&#21487;&#20197;&#25298;&#32477;&#35831;&#27714;&#24182;&#25552;&#20379;&#35814;&#32454;&#30340;&#38169;&#35823;&#28040;&#24687;&#12290;<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<h4>&#20351;&#29992;Session<\/h4>\n<ul>\n<li>\n<p><strong>&#20248;&#28857;<\/strong>&#65306;<\/p>\n<ul>\n<li>&#38750;&#24120;&#31616;&#21333;&#26131;&#29992;&#65292;&#36866;&#21512;&#20110;&#23567;&#22411;&#21040;&#20013;&#22411;&#39033;&#30446;&#12290;<\/li>\n<li>&#19981;&#20381;&#36182;&#20110;&#20219;&#20309;&#22806;&#37096;&#24211;&#65292;&#21482;&#38656;&#31616;&#21333;&#30340;PHP&#20195;&#30721;&#21363;&#21487;&#23454;&#29616;&#12290;<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>&#22914;&#20309;&#20351;&#29992;<\/strong>&#65306;<\/p>\n<ol>\n<li>&#21019;&#24314;&#19968;&#20010;&#21253;&#21547;&#29992;&#25143;&#20449;&#24687;&#30340;&#20250;&#35805;&#23384;&#20648;&#12290;<\/li>\n<li>&#22312;&#38656;&#35201;&#35775;&#38382;&#25935;&#24863;&#25968;&#25454;&#25110;&#25191;&#34892;&#29305;&#23450;&#25805;&#20316;&#20043;&#21069;&#65292;&#26816;&#26597;&#24403;&#21069;&#29992;&#25143;&#26159;&#21542;&#20855;&#26377;&#25152;&#38656;&#30340;&#26435;&#38480;&#12290;<\/li>\n<li>&#22914;&#26524;&#27809;&#26377;&#36866;&#24403;&#30340;&#26435;&#38480;&#65292;&#21487;&#20197;&#25298;&#32477;&#35831;&#27714;&#24182;&#25552;&#20379;&#35814;&#32454;&#30340;&#38169;&#35823;&#28040;&#24687;&#12290;<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026;<code>User<\/code>&#30340;&#27169;&#22411;&#65292;&#20854;&#20013;&#21253;&#21547;<code>id<\/code>, <code>name<\/code>, &#21644;<code>email<\/code>&#23383;&#27573;&#65292;&#25105;&#20204;&#38656;&#35201;&#22312;&#25511;&#21046;&#22120;&#20013;&#22788;&#29702;<code>TokenMismatchException<\/code>&#24322;&#24120;&#12290;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppHttpControllers;\n\nuse IlluminateFoundationBusDispatchesJobs;\nuse IlluminateRoutingController as BaseController;\nuse IlluminateFoundationValidationValidatesRequests;\nuse IlluminateFoundationAuthAccessAuthorizesRequests;\n\nclass UserController extends Controller\n{\n    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;\n\n    protected $middleware = [\n        'auth:api',\n    ];\n\n    \/**\n     * Get a list of the User's posts.\n     *\n     * @return IlluminateHttpResponse\n     *\/\n    public function index()\n    {\n        try {\n            \/\/ &#27491;&#24120;&#24773;&#20917;&#65292;&#36820;&#22238;&#25152;&#26377;&#29992;&#25143;&#30340;&#20449;&#24687;\n            return response()-&gt;json($this-&gt;getUser(), 200);\n        } catch (TokenMismatchException $e) {\n            \/\/ &#22788;&#29702;token&#19981;&#21305;&#37197;&#30340;&#24773;&#20917;\n            return response()-&gt;json(['error' =&gt; 'Invalid token'], 401);\n        }\n    }\n\n    \/**\n     * Retrieve a single user by ID.\n     *\n     * @param  int  $id\n     * @return IlluminateHttpResponse\n     *\/\n    public function show($id)\n    {\n        try {\n            \/\/ &#27491;&#24120;&#24773;&#20917;&#65292;&#26681;&#25454;ID&#33719;&#21462;&#21333;&#20010;&#29992;&#25143;&#30340;&#20449;&#24687;\n            return response()-&gt;json($this-&gt;getUser($id), 200);\n        } catch (TokenMismatchException $e) {\n            \/\/ &#22788;&#29702;token&#19981;&#21305;&#37197;&#30340;&#24773;&#20917;\n            return response()-&gt;json(['error' =&gt; 'Invalid token'], 401);\n        }\n    }\n\n    private function getUser($userId)\n    {\n        \/\/ &#26681;&#25454;$userId&#26597;&#35810;&#25968;&#25454;&#24211;\n        \/\/ ...\n    }\n}<\/code><\/pre>\n<p>&#22312;&#36825;&#20010;&#20363;&#23376;&#20013;&#65292;&#25105;&#20204;&#22312;<code>UserController<\/code>&#31867;&#30340;<code>index()<\/code>&#26041;&#27861;&#20013;&#28155;&#21152;&#20102;&#19968;&#20010;try-catch&#22359;&#65292;&#29992;&#20110;&#25429;&#33719;<code>TokenMismatchException<\/code>&#12290;&#22914;&#26524;&#21457;&#29983;&#27492;&#24322;&#24120;&#65292;&#23558;&#36820;&#22238;&#19968;&#20010;&#24102;&#26377;&#38169;&#35823;&#28040;&#24687;&#30340;JSON&#21709;&#24212;&#65292;&#25351;&#31034;&#23458;&#25143;&#31471;&#20182;&#20204;&#38656;&#35201;&#37325;&#26032;&#30331;&#24405;&#25110;&#21047;&#26032;&#20196;&#29260;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#26631;&#39064;&#65306;&#22312;Laravel&#20013;&#22788;&#29702;TokenMismatchException&#65306;&#23454;&#29992;&#25351;&#21335; TokenM..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[44],"tuisongtax":[],"class_list":["post-903","my1js","type-my1js","status-publish","hentry","my1js2nav-laravel"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/903","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=903"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=903"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=903"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=903"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}