因此,我遇到了这个问题,在通过项目提交AJAX请求时出现419错误代码。我知道此错误是由于CSRF令牌未传递或无效造成的。
背后的故事:我在项目上创建了一个“维护模式”。此维护模式通过显示503错误页面来限制对前端的访问,但仍允许我的管理员访问后端以更新站点等。这是使用某些中间件完成的。有关如何完成此功能的更多信息,请参见我的github页面上的代码。
https://github.com/JDsWebService/ModelAWiki/commit/263a59ebba42688d4a232a5838334b9ee419504c
因此,这可能是我的生产环境中的503错误页面存在问题吗?我不太确定。
我已经看过关于SOF的问答,但是似乎并没有帮助我。
Laravel 5.5 ajax call 419 (unknown status)
这是生产站点,请查看控制台以获取更多信息:http://modelawiki.com/
这是与419错误有关的代码:
JavaScript
$(document).ready(function() {
// CSRF Ajax Token
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
// Add Section Post Button
$('#subscribeButton').click(function(event) {
/* Act on the event */
// Clear Feedback Boxes
$('#valid-feedback').css("display", "none");
$('#invalid-feedback').css("display", "none");
// Input Field
var email = $('#email').val();
var token = $('meta[name="csrf-token"]').attr('content');
console.log(email);
console.log(token);
// Post
$.ajax({
type: 'POST',
url: '/email/subscribe/',
dataType: 'json',
data: {
email: email,
"_token": token,
},
success: function (data) {
// Check Server Side validation
if($.isEmptyObject(data.errors)){
// Show the Feedback Div
$('#valid-feedback').css("display", "block");
// Add the Bootsrapt Is Invalid Class
$('#email').addClass('is-valid');
// Validation Failed Display Error Message
$('#valid-feedback').text(data['success']);
// Animate the Object
$('#email').animateCss('tada', function() {});
console.log(data['success']);
}else{
// Show the Feedback Div
$('#invalid-feedback').css("display", "block");
// Add the Bootsrapt Is Invalid Class
$('#email').addClass('is-invalid');
// Validation Failed Display Error Message
$('#invalid-feedback').text(data.errors[0]);
// Animate the Object
$('#email').animateCss('shake', function() {});
console.log(data.errors);
}
},
error: function (data) {
console.log(data);
}
}); // End Ajax POST function
}); // End Click Event
// On Focus of the Email Box
$('#email').focus(function(event) {
/* Act on the event */
$('#valid-feedback').css("display", "none");
$('#invalid-feedback').css("display", "none");
});
}); // End Document Ready
HTML表单
<div class="input-group input-group-newsletter">
<input type="email" class="form-control" placeholder="Enter email..." aria-label="Enter email..." aria-describedby="basic-addon" id="email">
<div class="input-group-append">
<button class="btn btn-secondary" type="button" id="subscribeButton">Notify Me!</button>
</div>
<div id="invalid-feedback" class="invalid-feedback"></div>
<div id="valid-feedback" class="valid-feedback"></div>
</div>
标题(这表明CSRF令牌实际上位于503错误页面上)
<meta name="csrf-token" content="{{ csrf_token() }}">
同样,此代码适用于我的本地环境,但不适用于我的生产环境。 (我也知道AJAX请求可以并且可以在生产环境中很好地在我网站的其他部分中处理,所以我知道这不是服务器问题,并且与代码有关)
以防万一,这也是我的控制器代码。
// Store the Email into the database
public function subscribe(Request $request) {
// Validate the request
$validator = Validator::make($request->all(), [
'email' => 'required|email|max:255|unique:email_subscribers,email',
]);
// If the validation fails
if($validator->fails()) {
return response()->json([
'errors' => $validator->errors()->all(),
]);
}
// New Section Object
$subscription = new EmailSubscription;
// Add Name into Section Object
$subscription->email = $request->email;
// Save the Section
$subscription->save();
// Return The Request
return response()->json([
'success' => 'You have successfully subscribed! Check your email!'
]);
}
我的路线
// Email Routes
Route::prefix('email')->group(function() {
// Create Post Route for subscribing
Route::post('/subscribe', 'EmailSubscriptionsController@subscribe')->name('email.subscribe');
});
答案 0 :(得分:0)
为了防患于未然,我们遇到了同样的问题,这是由于服务器空间磁盘问题引起的。因此,Laravel无法写入文件(特别是sessions.php)。