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

时间:2017-08-14 06:08:50

标签: php jquery ajax laravel-5

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

2 个答案:

答案 0 :(得分:2)

在下面的代码中,您可以在登录后通过regenerate()方法获取新令牌,并返回响应csrf_token()。

Your Controller inside the function

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);
           }
        });

答案 1 :(得分:0)

只需将其添加到您的脚本

即可
<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

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

  1. Handling expired token in Laravel

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

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