关于php:如何使用Ajax在LARAVEL中获得新的CSRF令牌

How can I get new CSRF token in LARAVEL by using ajax

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Your Controller inside the function

public function refreshToken(Request $request)
{
     session()->regenerate();
     return response()->json([
       "message"=>__("admin/login.login_success"),
       "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
2
3
4
5
6
<script type="text/javascript">
            $.ajaxSetup({
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
                }
            });

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

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

希望这对您有用。

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

如果您仍然发现同一问题,请查看以下内容

  • 在Laravel中处理过期的令牌

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

  • 并且确保您查看所有答案,而不只是检查了一个