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
并且确保您查看所有答案,而不只是检查了一个