如何使用 ajax 在 LARAVEL 中获取新的 CSRF 令牌

Posted

技术标签:

【中文标题】如何使用 ajax 在 LARAVEL 中获取新的 CSRF 令牌【英文标题】:How can I get new CSRF token in LARAVEL by using ajax 【发布时间】:2018-01-21 22:15:27 【问题描述】:

我创建了一个包含很多字段的表单,用户可以在其中创建无限的字段。 如果用户在它上面花费更多时间,CSRF 令牌就会过期,并且当他点击提交时,LARAVEL 会返回错误 CSRF 令牌不匹配。 那么如何通过使用 ajax 调用获取新的 CSRF 令牌,以便定期更新 CSRF? 我无法刷新或重新加载表单。

【问题讨论】:

Handling expired token in Laravel的可能重复 【参考方案1】:

通过使用此代码,您可以在登录后使用regenerate() 方法获取新令牌,并在响应中返回一个新的csrf_token()

你在函数中的控制器:

public function refreshToken(Request $request)

     session()->regenerate();
     return response()->json([
        "token"=>csrf_token()],
      200);


javascript

$.ajax(
    url: "url('refresh-token')",
    type: 'get',
    dataType: 'json',
    success: function (result) 
        $('meta[name="csrf-token"]').attr('content', result.token);
        $.ajaxSetup(
            headers: 
                'X-CSRF-TOKEN': result.token
            
        );
    ,
    error: function (xhr, status, error) 
        console.log(xhr);
    
);

【讨论】:

感谢您的提示。我使用这种方法在准备好 ajax 的文档上加载新的 CSRF 令牌,以从 Laravel 缓存响应中替换静态页面中的所有令牌。【参考方案2】:

只需将其添加到您的脚本中

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

并确保您已将令牌添加到您的元标记中,如下所示。

<meta name="_token" content="!! csrf_token() !!" />

我希望这对你有用。

链接https://laravel.com/docs/5.4/csrf#csrf-x-csrf-token

如果您仍然发现同样的问题,请查看这些内容

    Handling expired token in Laravel

    https://laracasts.com/discuss/channels/laravel/csrf-token-mismatch-error-on-session-timeout-form?page=1

并确保您查看所有答案,而不仅仅是检查一个

【讨论】:

是的@Geoffrey。我只是顺便改了名字 实际上,我也在做同样的事情,但是这个密钥会在一段时间后过期,所以我需要新密钥而不重新加载页面。 在这种情况下,您可能需要看看这些东西。 1.***.com/questions/31449434/… 2.laracasts.com/discuss/channels/laravel/….并确保您查看所有答案,而不仅仅是检查一个。 嘿,是的,Brain 你能把这个答案放在原始答案中,这样我就可以将它标记为正确的解决方案。非常感谢,这是最简单的解决方案。 已添加。 @FIROZTENNALI

以上是关于如何使用 ajax 在 LARAVEL 中获取新的 CSRF 令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AJAX 调用中获取 JavaScript 变量作为 Laravel 路由名称

如何从 laravel 中的 ajax 调用中获取值

Laravel:如何在数据表中使用 ajax 对数据进行排序?

在 Laravel 中使用 Ajax/jQuery 从数据库中获取数据

Laravel 5:在路由中获取 ajax 数据并传递给控制器

如何从控制器获取记录到 Ajax laravel 5.2