[英]Laravel csrf token mismatch on ajax post a second time
我試圖在 Laravel 中提交一個 ajax 帖子,但我在表單的 csrf 令牌方面遇到了一些問題。 在我的表單中,如果我在第一次提交表單時滿足了我在 ajax post url 中設置的條件。 但是,如果我提交表單並故意使我在第一次嘗試時在我的 ajax post url 中設置的條件失敗,如果我再次提交表單,我的 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>
你確定每次都用ajax發送嗎?
data: {
"_token": "{{ csrf_token() }}",
}
$("#cform")[0].reset();
或在普通的 javascript 中:
document.getElementById("cform").reset();
public function regenerateToken(){
session()->regenerate();
return response()->json([
'msg'=>'success',
'token'=>csrf_token()
]);
}
$('#form').submit(funtion(event) {
event.preventDefault(event);
// Submit the form using AJAX.
$.ajax({
type: 'POST',
url: form.attr('action'),
data: formData
})
.done(function(response) {
// Make sure that the formMessages div has the 'success' class.
if (response.msg === 'success') {
$('#token').val(response.token);
console.log($('#token').val());
}
}
$('input[type="text"],input[type="email"] ,textarea, select').val(''); $(this).trigger('reset');
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.