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

前端 未结 2 749
我在风中等你
我在风中等你 2021-01-18 01:53

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 clic

相关标签:
2条回答
  • 2021-01-18 01:57

    By using this code you can get a new token after login by using the regenerate() method and returning a new csrf_token() in the response.

    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);
        }
    });
    
    0 讨论(0)
  • 2021-01-18 02:05

    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

    0 讨论(0)
提交回复
热议问题