在 laravel 11 应用程序中提交表单时响应出现 CSRF 令牌不匹配错误

问题描述 投票:0回答:1

我正在使用 Laravel 11 构建一个应用程序,其中我创建了一个管理面板并创建了一个前端网站。在前端网站中存在一个表单。当我提交表单时,不会调用请求,并且 HTTP 状态代码 419 未知状态即将到来。以及在浏览器中检查请求时。响应显示“CSRF 令牌不匹配”

错误 [在此输入图片描述](https://i.sstatic.net/itmbwv8j.png)

web.php

<?php
use App\Http\Controllers\UserController;
use App\Http\Controllers\Front\HomeController;
use App\Http\Controllers\Front\ComplainRegisterController;
use Illuminate\Support\Facades\Route;

// Route::get('/', function () {
//     return view('welcome');
// });

// Admin Routes
Route::get('admin', [UserController::class, 'index']);
Route::post('admin/auth', [Usercontroller::class, 'auth'])->name('admin.auth');
//Route::middleware([AdminAuth::class])->group(function (){
    Route::get('admin/dashboard', [UserController::class, 'dashboard'])->name('dashboard');
//});



// Website page Routes
Route::get('/', [HomeController::class, 'index']);
Route::get('/onlinecomplain', [ComplainRegisterController::class, 'index'])->name('onlineComplain');
Route::post('/registercomplain', [ComplainRegisterController::class, 'store']);

刀片模板中的表格

<form action="{{url('/registercomplain')}}" method="POST" class="contact-form contact-form">
                        @csrf
                        <div class="row">
                            <div class="col-lg-12">
                                <div class="form-group">
                                    <input class="form-control" id="email" name="email" placeholder="Email*" type="email">
                                    <span class="alert-error"></span>
                                </div>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-lg-6">
                                <div class="form-group">
                                    <input class="form-control" id="captchafill" name="captchafill" placeholder="Enter Captcha" type="text">
                                    <span class="alert-error"></span>
                                </div>
                            </div>
                            <div class="col-lg-6">
                                <div class="form-group">
                                    {{-- <img src="{{ captcha_src() }}" id="captcha-img" class="captcha"> --}}
                                </div>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-lg-12">
                                <button type="submit" name="submit" id="submit">
                                    <i class="fa fa-paper-plane"></i> Send OTP
                                </button>
                                <!-- <button type="submit" name="btnSubmit" id="btnSubmit" class="d-none">Submit</button> -->
                            </div>
                        </div>
                        <!-- Alert Message -->
                        <div class="col-lg-12 alert-notification">
                            <div id="message" class="alert-msg"></div>
                        </div>
                    </form>

控制器

<?php

namespace App\Http\Controllers\Front;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class ComplainRegisterController extends Controller
{
    public function index()
    {
        return view('front.onlinecomplain');
    }

    public function store(Request $request)
    {
        echo '<pre>'; print_r($request->post); die;
    }
}

如何解决这个问题。请指导我 谢谢

php laravel csrf laravel-11
1个回答
0
投票
  1. 仔细检查 @csrf 指令是否存在于表单中并且在 HTML 输出中正确呈现。

    <form method="POST" action="{{ url('/registercomplain') }}">
        @csrf
        <!-- rest of your form fields -->
    </form>
    

    然后,在浏览器中查看页面源代码。您应该看到一个隐藏的输入字段,如下所示:

    <input type="hidden" name="_token" value="randomTokenStringHere">
    
  2. 验证

    VerifyCsrfToken
    中间件是否在
    app/Http/Kernel.php
    文件中正确配置。

    • 检查
      VerifyCsrfToken
      中间件:
      打开
      app/Http/Kernel.php
      并查找 Web 中间件组。它应该 包括
      \App\Http\Middleware\VerifyCsrfToken::class
      ,。如果缺少,添加它
  3. 检查config/session.php中的会话配置,尤其是会话驱动程序和生命周期设置。

    {
    'driver' => 'file',
    'lifetime' => 120,
    'expire_on_close' => false,
    'secure' => false,
    }
    
  4. 尝试清除应用程序缓存并重新生成应用程序密钥。

    php artisan config:clear
    php artisan cache:clear
    php artisan view:clear
    php artisan route:clear
    
© www.soinside.com 2019 - 2024. All rights reserved.