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

FIR*_*ALI 10 php ajax jquery laravel-5

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

Ram*_*esh 12

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

您在函数内的控制器:

public function refreshToken(Request $request)
{
     session()->regenerate();
     return response()->json([
        "token"=>csrf_token()],
      200);

}
Run Code Online (Sandbox Code Playgroud)

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);
    }
});
Run Code Online (Sandbox Code Playgroud)


Sar*_*roj 2

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

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

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

<meta name="_token" content="{!! csrf_token() !!}" />
Run Code Online (Sandbox Code Playgroud)

我希望这对你有用。

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

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

  1. 在 Laravel 中处理过期令牌

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

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