如何解决Laravel 419 CSRF令牌错误

时间:2020-02-27 11:11:27

标签: php laravel

我知道大多数419 errorcsrf中的Laravel令牌有关,并且我已经正确添加了meta标签并将其附加到每个ajax请求。我遇到问题的页面不是ajax提交。

<meta name="csrf-token" content="{{ csrf_token() }}">

对于任何其他表单,我正在使用spatie/laravel-html回购,因此它将_token添加到所有表单上。

以下是其中一种格式的html

<form method="POST" action="https://example.com/login" class="needs-validation">
    <input type="hidden" name="_token" value="NmvrH2BZtzCg4ity9cRDG9JXgJER3EUtO0BnXxGH">
    <div class="form-group">
        <label for="email" class="form-control-label required">Email</label>
        <input type="email" name="email" id="email" placeholder="Email" required="required" class="form-control">
    </div>
    <div class="form-group">
        <label for="password" class="form-control-label required">Password</label>
        <input type="password" name="password" id="password" placeholder="Password" required="required" class="form-control">
    </div>
    <div>
        <span data-href="https://example.com/register" class="clickable-row btn float-left">Sign Up</span>
        <button type="submit" class="btn float-right">Login</button>
    </div>
</form>

在我的项目中,只有一条路线/account导致了419 error。奇怪的是,第一次单击update时会引发错误,然后如果我返回同一页面,它将起作用。

我曾尝试清除cache,更改路由名称或更改生产中storage的文件夹权限,但似乎没有任何解决办法。

我还能做些什么来解决该错误?

谢谢

2 个答案:

答案 0 :(得分:0)

尝试在SESSION_DRIVER=file文件中设置.env

然后运行

php artisan config:clear
php artisan cache:clear

然后重试

答案 1 :(得分:0)

根据https://laravel.com/docs/5.8/csrf,使用csrf令牌创建元标记可用于ajax请求。您仍然需要在要提交的表单中添加一个csrf令牌字段。尝试在表单中添加@csrf。它将使用令牌创建一个隐藏字段。

<form method="POST" action="/target">
    @csrf
    ...
</form>