dqlb38410
2017-08-14 06:08
浏览 163
已采纳

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

I have created a form which is having a lot of fields and user can create an unlimited field in it. If a user spends more time on it CSRF token get expires and when he clicks on the submit LARAVEL return the error CSRF token mismatch. So how can I get new CSRF token by using ajax call so I can update the CSRF on a regular time of interval? I can not refresh or reload the form.

图片转代码服务由CSDN问答提供 功能建议

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

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • doupa9062 2017-08-14 06:12
    已采纳

    Just add this to your script

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

    And make sure you have added token to your meta tag like below.

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

    I hope this will work for you.

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

    If you still found the same issue then please review these pieces of stuff

    1. Handling expired token in Laravel

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

    And Make sure you take a look at all answers, not only checked one

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • douliao2493 2019-07-29 10:50

    In below code you can get new token after login by regenerate() method and return response csrf_token().

    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);
               }
            });
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题