Laravel5:compiled.php第3123行中的TokenMismatchException:

时间:2016-09-21 20:04:12

标签: php laravel laravel-5

情况:

如果已经被问到,请提前抱歉。但无论我怎么做都无法发挥作用。

我使用Laravel 5作为API。

我有一个简单的功能来编辑任务。

我正在通过我的网络应用或Postman进行测试。

我总是收到这个错误:

TokenMismatchException in compiled.php line 3123:

TokenMismatchException

代码:

功能:

public function updateTask(Request $request)
{
    $id = $request->input('id');

    $task = Task::find($id);
    $task->name = $request->input('name');
    $task->type = $request->input('type');
    $task->save();

    return $task;
}

路线:

Route::group(['middleware' => ['web']], function () {

    Route::post('update', 'TaskController@updateTask');
});

问题:

为什么我收到错误?

5 个答案:

答案 0 :(得分:2)

尝试在表单中添加:

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

答案 1 :(得分:1)

它适用于您的网络应用,因为您的网络应用正在传递令牌。

您需要打开app/Http/Kernel.php并注释掉\App\Http\Middleware\VerifyCsrfToken::class,。但是,这会使您的网站容易受到CSRF攻击,因此您还应该找到另一种方法来保护您的网站。

我的建议是保留CSRF中间件并创建一个新的路由组,其中包含您选择的前缀(通常类似于api/v1/),它位于web中间件组之外。这些路线不会受到CSRF的保护,因此您应该找到另一种方法来保护它们。我最近使用jwt-auth做了同样的事情,取得了很多成功。 https://github.com/tymondesigns/jwt-auth

当然,如果您的前端没有与后端完全分离,并且Laravel正在输出初始页面,然后稍后由angular控制,您可以将CSRF令牌放入元标记中并稍后使用angular和pass获取它它在标题X-CSRF-TOKEN中,然后Laravel将接收它。

答案 2 :(得分:0)

您需要在标题中传递此内容;

headers: {
    'X-CSRF-TOKEN': {{ csrf_token() }}
},

答案 3 :(得分:0)

我通过将路径名称作为项目插入数组$来解决它,除了在文件中:

app/http/Middleware/VerifyCsrfToken.php

像这样:

/**
 * The URIs that should be excluded from CSRF verification.
 *
 * @var array
 */
 protected $except = [

     'update'
 ];

答案 4 :(得分:0)

我解决了:

php artisan config:cache

php artisan key:generate