如何防止laravel中的不匹配令牌错误?

时间:2017-07-25 10:27:13

标签: php laravel

我开始使用Laravel,它很棒。很多有用的功能等。但是我对csrf_token有疑问。我的会话时间是默认的120分钟,让我们说我登录,浏览器选项卡保持打开状态,我没有为120分钟做任何事情并且过期,这意味着我必须再次登录。在120分钟不活动后在页面上执行某些操作时,需要使用POST方法对用户进行身份验证,我收到mismatch token exception错误。现在我需要解决这个问题,因为用户确实有可能在不做任何事情的情况下打开浏览器标签。有谁知道如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

app/Exceptions/Handle.php中,将render函数替换为此函数:

public function render($request, Exception $e)
{
     if ($e instanceof \Illuminate\Session\TokenMismatchException) {
            return redirect()
            ->back()
            ->withInput($request->except('password', '_token'))
            ->withError('Validation token has expired. Please try again');
     }
    return parent::render($request, $e);
}

它将使用新令牌重定向到同一页面。

答案 1 :(得分:0)

@Miko Mi, Laravel CSRF令牌是在代码会话中生成的令牌,并存储为同步到浏览器的内存。(cookie),当您发布任何表单或执行任何操作时,它将通过该请求传递该CSRF令牌,如果它已过期,则它将提供此异常token mismatch

您应该做的是,如果会话过期,请登录页面(例如,超过120分钟),因此CSRD令牌将被续订,并且不会有任何问题。

答案 2 :(得分:0)

我想你可以试试这个:

“X-CSRF-TOKEN”是将以下代码添加到主布局中,并继续正常进行ajax调用:

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


<script type="text/javascript">
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
</script>

希望这对你有用!!!

答案 3 :(得分:0)

将ur php更改为alt ...我做了,现在可以正常使用

例如,将cpanel中的PHP更改为:从ea-php74更改为alt-php74

您将再也看不到

只需尝试一下并完成:)

对于初学者:

Cpanel-> MultiPHP Manager --->从ea-php74到alt-php74