【问题标题】:CSRF Token expires in file upload form in Laravel 5CSRF Token 在 Laravel 5 中以文件上传形式过期
【发布时间】:2015-05-14 16:35:54
【问题描述】:

我有一个文件上传表单,其中包含 csrf 令牌 的隐藏字段。当文件小于 1MB 时,一切正常,但是当我上传大文件时,请求会花费更多时间,而且令牌似乎过期了,因为我收到了 TokenMismatchException,有什么解决方法吗?谢谢

这是我的表格:

<form method="POST" action="" enctype="multipart/form-data">
        <input type="hidden" name="_token" value="{{{ csrf_token() }}}" />
        <input type="hidden" name="user_id" value="{{ $user->id }}" />

        <div class="form-group">
            <label for="file">File</label>
            <input type="file" name="file" />
        </div>
</form>

这是我的控制器:

public function store(Request $request)
{
    $file = $request->file('file');
    $fileName = $file->getClientOriginalName();

    $user     = User::findOrFail ($request->get('user_id'));
    $filePath = "/app/files/$user->id/";
    $file->move(storage_path().$filePath, $fileName);

    return redirect('/users/' . $user->id . '/files')->with('uploaded', true);
}

【问题讨论】:

  • 您是否尝试过更改会话驱动程序?
  • 还没有尝试...但是没有任何方法可以仅针对该表单禁用 CSRF 吗?

标签: laravel csrf laravel-5


【解决方案1】:

您可以修改您的 CSRF 中间件(位于 app/Http/Middleware 中)以忽略该控制器操作:

public function handle($request, Closure $next)
{
    if(\Route::is('path/to/form')) {
        return $next($request);
    }

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

【讨论】:

【解决方案2】:

检查您在 php.ini 中的 upload_max_filesizepost_max_size 是否足够高以支持您的文件大小。如果post_max_size 太低,那么发布的输入会被截断,CSRF 令牌不会通过。

请不要关闭 CSRF 或将其设置为在某些端点上被忽略...

【讨论】:

    【解决方案3】:
    <input type="hidden" name="_token" value="{{{ csrf_token() }}}" />
    

    看,你已经写了 {{{ csrf_token() }}}

    你应该写 {{ csrf_token() }}

    【讨论】:

      【解决方案4】:

      您需要在表单中指定 CSRF,如下所示:

      <form method="POST" action="" enctype="multipart/form-data">
      @csrf
      (...)
      

      Laravel Documentation

      【讨论】:

        猜你喜欢
        • 2022-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-17
        • 2016-03-13
        • 2013-10-10
        • 2016-05-31
        相关资源
        最近更新 更多