Laravel Ajax 419生产时出错,但本地开发中没有错误,/ storage / logs / laravel.log中没有任何内容

时间:2018-08-04 01:44:10

标签: javascript php ajax laravel laravel-5

因此,我遇到了这个问题,在通过项目提交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');

});

1 个答案:

答案 0 :(得分:0)

为了防患于未然,我们遇到了同样的问题,这是由于服务器空间磁盘问题引起的。因此,Laravel无法写入文件(特别是sessions.php)。