当会话在Laravel中的客户端过期时,如何处理TokenMismatchException

时间:2019-01-09 08:38:07

标签: javascript ajax laravel

我在我的项目中使用laravel + ajax,并且这个token_mismatch异常使我非常头疼。

问题 当用户会话期满时,CSRF令牌期满,然后返回执行或错误。当用户在一段时间后,特别是在120M之后离开页面,然后尝试发送请求时,会发生此错误,我得到此令牌不匹配异常,因为使用会话令牌已过期,并且浏览器正在发送旧的令牌。

我的方法-可能的话 我在我的Exception / handler中捕获到会话已过期,然后生成一个新会话,然后将其替换为旧会话,然后再次发送请求,但这不起作用,因为会话令牌也需要从后端刷新,请在这方面谢谢我。

  var form_data = new FormData();
      form_data.append('_token', '{{csrf_token()}}');
      form_data.append('username', $('input[name="username"]').val());
      form_data.append('password', $('input[name="password"]').val());

      axios.post('/sign-in', form_data )
      .then(function(resp){
           console.log(resp.data.data);
       })
       .catch(function(error){
           printErrorMsg(error.response.data.error);
        })
      });

在我的期望代码中

if ($exception instanceof \Illuminate\Session\TokenMismatchException) {
   if ($request->ajax()) {
       return response([
       'error' => ['expired' => ['token expired']]], 422);
    }
}

所以我的问题是:有什么方法可以在不离开页面的情况下刷新会话令牌?也许要替换它。

0 个答案:

没有答案