首页 文章

Laravel csrf令牌在第二次ajax帖子上不匹配

提问于
浏览
0

我试图在laravel中提交一个ajax帖子,但我对表单的csrf令牌有一些问题 . 在我的表单中,如果我第一次提交表单时满足了我在ajax post url中设置的条件 . 但是,如果我提交表单并故意失败我在第一次尝试中在我的ajax帖子网址中设置的条件,如果我再次提交表单,我的ajax错误日志中会出现令牌不匹配异常 . 我是否需要刷新每个ajax帖子的csrf_token?

以下是我的代码

JS

$(document).on('submit','.registration-form',function(e){
    e.preventDefault();
    var form = $(this);
    var form_url = $(this).attr("action");
    var form_values = $(this).serialize();

    $.ajax({
        url:form_url,
        type:'POST',
        data:form_values,
        dataType: 'json',
        async:false,
        success: function(result){
            console.log(result);
            if(result['status']==true){
                location.href = result['redirect'];
            }
            else{
                form.find(".form-details").show().html(result['message']);
            }
        },
        error: function(ts) {
            console.log(ts.responseText)
        }
    });
});

HTML

<form action="{{ url('login') }}" method="POST" class="registration-form">
    {{ csrf_field() }}
    <input type="text" name="username" class="input" placeholder="Email">
    <input type="password" name="password" class="input" placeholder="Password">
    <button class="button is-redbox is-flat is-fullwidth">Login</button>
</form>

2 回答

  • 1

    你确定每次都是用ajax发送的吗?

    data: {
        "_token": "{{ csrf_token() }}",
    }
    
  • 0
    $("#cform")[0].reset();
    

    或者在普通的javascript中:

    document.getElementById("cform").reset();
    

相关问题