[英]TokenMismatchException Laravel Contact Form
我了解您需要其他問題/答案中發布的csrf_token(),但是如果我從無法獲取令牌的外部服務器撥打電話怎么辦?
第一次在Laravel中構建任何東西。 我只是構建一個簡單的Ajax聯系人表單來熟悉它。
這是我的JS(會有一些客戶端處理,因此我需要單獨的值,而不是直接將其序列化)
$('#contact-form').on('submit', function(e){
e.preventDefault();
$.ajax({
type: 'POST',
url: 'forms/contact.php',
dataType: "json",
data: {
name: encodeURIComponent($("#contact-name").val()),
email: encodeURIComponent($("#contact-email").val()),
phone: encodeURIComponent($("#contact-phone").val()),
subject: encodeURIComponent($("#contact-subject").val()),
message: encodeURIComponent($("#contact-message").val())
},
success: function(data) {
alert(data.message);
}
});
});
這是我的路線(在web.php中)
Route::post('forms/contact.php', 'ContactController@send');
這是我的Contact Controller的主要公共功能“發送”
public function send(Request $request){
return response()->json([
'result' => true,
'message' => 'success'
]);
}
現在的主要目標是將成功的消息返回表單。
...還有誰知道我將如何使用類似的方法將驗證返回到表單?
$this->validate($request, [
'name' => 'required',
'email' => 'required|email',
'message' => 'required'
]);
抱歉,我昨天拿起Laravel,所以我超級菜鳥
Laravel有一個CRSF令牌,要求您將密鑰傳遞給存儲在會話中的POST調用。 如果此令牌不匹配或不存在,它將拒絕該請求。 您可以在此處了解更多信息
怎么修:
name: encodeURIComponent($("#contact-name").val()),
email: encodeURIComponent($("#contact-email").val()),
phone: encodeURIComponent($("#contact-phone").val()),
subject: encodeURIComponent($("#contact-subject").val()),
message: encodeURIComponent($("#contact-message").val()),
_token: "{{ csrf_token() }}"
默認情況下,Laravel將保護您的CSRF攻擊(使用web
中間件時)。
在這里閱讀更多有關它的信息: https : //laravel.com/docs/5.4/csrf
一種簡單的方法是在頁面中輸出CSRF令牌,然后使用Javascript代碼獲取該令牌並將其存儲到全局變量中。
在您的郵件html頁面模板中:
<script>
window.Laravel = <?php echo json_encode([
'csrfToken' => csrf_token(),
]); ?>
</script>
然后,在標頭值X-CSRF-TOKEN
中的任何發布,放置和修補請求中發送它。
例如,在使用jQuery ajax的帖子調用中:
$('#contact-form').on('submit', function(e){
e.preventDefault();
$.ajax({
type: 'POST',
beforeSend: function(request) {
request.setRequestHeader("X-CSRF-TOKEN", Laravel.csrfToken);
},
url: 'forms/contact.php',
dataType: "json",
data: {
name: encodeURIComponent($("#contact-name").val()),
email: encodeURIComponent($("#contact-email").val()),
phone: encodeURIComponent($("#contact-phone").val()),
subject: encodeURIComponent($("#contact-subject").val()),
message: encodeURIComponent($("#contact-message").val())
},
success: function(data) {
alert(data.message);
}
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.