上传某些文件时令牌不匹配错误

时间:2016-08-10 10:53:36

标签: php validation laravel

我实现了一个用于上传3个不同文件的表单。

这是一个:

<form method="POST" action="{{ route('register_update' , Auth::user()->id) }}" enctype="multipart/form-data">
    <input type="hidden" name="_token" value="{{{ csrf_token() }}}" />
    <div class="file-container">
       <input type="file" name="carte-id" id="id-file" class="input-file">
       <div class="fake-input-file">
         <div class="cross-container" id="cross-cont1">
           <i class="icon-plus-symbol" id="cross1"></i>
         </div>
         <div class="file-label" id="id-label">
           <label>Carte d'identité</label>
         </div>
       </div>
     </div>

这是我的控制器中的功能:

public function registerUpdate(CardAvsRequest $request){
        $id = Auth::user()->id;
        $first_name = User::find($id)->student->first_name;
        $last_name = User::find($id)->student->last_name;
        $name = $first_name . " " . $last_name;
        $message = "";
        if ($request->hasFile('carte-id'))
        {
            $image1 = $request->file('carte-id');
            if($image1->isValid())
            {
                if ($request->hasFile('avs'))
                {
                    $image2 = $request->file('avs');

                    if($image2->isValid())
                    {
                        if ($request->hasFile('permit'))
                        {
                            $image3 = $request->file('permit');

                            if($image3->isValid())
                            {
                                $path = config('card.path')."/$id";
                                $name = "carte-id.".$image1->getClientOriginalExtension();
                                $image1->move($path, $name);
                                $path = config('card.path')."/$id";
                                $name = "avs.".$image2->getClientOriginalExtension();
                                $image2->move($path, $name);
                                $path = config('card.path')."/$id";
                                $name = "permit.".$image3->getClientOriginalExtension();
                                $image3->move($path, $name);
                                $message = "Super ! Vous avez importé tous les fichiers nécessaires.";
                                //ici on dit dans la DB que l'utilisateur à uploadé tous les fichiers
                            }
                        }
                    }
                }
            }

        }
        return redirect()->route('account', $id)->with('message', $message);
    }

以下是CardAvsRequest规则:

public function rules()
    {
        return [
            'carte-id' => 'mimes:jpg,png,pdf,gif,jpeg,tiff,doc,docx,odt|max:10000',
            'avs' => 'mimes:jpg,png,pdf,gif,jpeg,tiff,doc,docx,odt|max:10000',
            'permit' => 'mimes:jpg,png,pdf,gif,jpeg,tiff,doc,docx,odt|max:10000',
        ];
    }

但是每当我尝试上传应该生成验证错误的文件(例如视频文件或可执行文件)时,我都会遇到这样的错误:

TokenMismatchException in VerifyCsrfToken.php line 67

我只是希望我的错误显示不是laravel。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

令牌行应为

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

只有两个花括号而不是三个

答案 1 :(得分:0)

你可以替换它:

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

with:

{{ csrf_field() }}

这将为您生成所有的HTML。所以它会产生这个例子。

<input type="hidden" name="_token" value="vVGUrt0Grroh7CpmI8blFH6pLQnWQzi6WBWqpZzG">

答案 2 :(得分:0)

请检查您的laravel安装路径与配置文件session.php中设置的路径相同。另一个解决方案是在'App\Http\Middleware\VerifyCsrfToken'文件夹下的kernel.php中注释行app\http。但是这不是一个正确的方法。