Мой запрос отправляется на страницу «Истек срок действия» на производственном сервере. - PullRequest
0 голосов
/ 31 января 2020

Я новичок в laravel. Я недавно закончил один проект с laravel и загрузил его на рабочий сервер. все сделано успешно, но я сталкиваюсь и выпускаю сейчас. когда я пытаюсь войти и отправить запрос, он всегда переходит на страницу с истекшим сроком действия 419 страниц. также та же самая проблема, когда я пытаюсь войти в область администратора на том же самом приложении, это дает мне ошибку несоответствия CSRF. я пытаюсь войти с помощью AJAX в бэкэнд того же приложения.

Я использую laravel версия 5.8. *. он хорошо работает с http, но когда я перенес это на рабочий сервер ie. в домене https он отправляет меня на страницу с истекшим сроком действия, когда я пытаюсь ввести учетные данные и войти в приложение.

Если вы знаете, почему это происходит, сообщите мне. Любая помощь будет оценена. Спасибо!

Вот мой html код: -

<form action="<?php echo url('admin/checkLogin'); ?>" class="col-lg-12" id="admin_sign_in_form"
                      method="post">
                    {{ csrf_field() }}
                    <div class="alert alert-danger loginerror" style="display: none;"><i
                                class="fa fa-exclamation-circle"></i> wrong credential.
                        <button type="button" class="close" data-dismiss="alert">×</button>
                    </div>
                    <div class="alert alert-success loginsuccess" style="display: none;"><i
                                class="fa fa-exclamation-circle"></i> wrong credential.
                        <button type="button" class="close" data-dismiss="alert">×</button>
                    </div>

                    <h5 class="title">Sign in to your Account</h5>
                    <div class="form-group-pvr form-float">
                        <div class="form-line-pvr">
                            <input type="email" class="form-control" name="email" id="email">
                            <label class="form-label">Email</label>
                            @if ($errors->has('email'))
                                <span class="invalid-feedback" role="alert">
                                    <strong>{{ $errors->first('email') }}</strong>
                                </span>
                            @endif
                            <span class="admin_email_err text-danger"></span>
                        </div>
                    </div>
                    <div class="form-group-pvr form-float">
                        <div class="form-line-pvr">
                            <input type="password" class="form-control" name="password" id="password">
                            <label class="form-label">Password</label>
                            @if ($errors->has('password'))
                                <span class="invalid-feedback" role="alert">
                                    <strong>{{ $errors->first('password') }}</strong>
                                </span>
                            @endif
                            <span class="admin_pass_err text-danger"></span>
                        </div>
                    </div>
                    {{-- <div class="form-check pull-left">
                        <label class="form-check-label">
                            <input class="form-check-input" type="checkbox" value="">
                            <span class="form-check-sign"></span>
                            Remember me
                        </label>
                    </div> --}}

                    <div class="col-lg-12 m-t-10">
                        {{--<a href="#"  id="admin_sign_in_btn" class="btn btn-purple waves-effect">Sign In</a>--}}
                        <button type="submit" id="adminLoginBtn" class="btn btn-purple btn-block waves-effect">Login</button>
                    </div>
                    {{--<div class="col-lg-12 m-t-20">--}}
                        {{--<a class="" href="pvr_forgot_password.html">Forgot Password?</a>--}}
                    {{--</div>--}}
                </form>

Вот мой Ajax код: -

$(document).ready(function () {
        $("#admin_sign_in_form").on('submit', function (e) {
            e.preventDefault();
            var error = 0;
            let adminemail = $("#email").val();
            let adminpassword = $("#password").val();

             if(adminemail == ''){
                 error++;
                 // $('.admin_email_err').html("Please Enter email");
             }else{
                 // $('.admin_email_err').html("");
             }

             if(adminpassword == ''){
                 error++;
                 // $('.admin_pass_err').html("Please Enter password");
             }else{
                 // $('.admin_pass_err').html("");
             }

            if(error==0) {
                $.ajax({
                    url: '<?php echo url('/admin/checkLogin'); ?>',
                    type: 'POST',
                    data: new FormData(this),
                    dataType: 'json',
                    contentType: false,
                    processData: false,
                    success:function(data){
                        if(data['code']==200){
                            //alert(data['code']);
                            //$('#loginform').trigger("reset");
                            $('.loginerror').css('display','none');
                            $('.loginsuccess').html(data['msg']).css('display','block');
                            setTimeout(function(){
                                window.location.href = '<?php echo url('admin/dashboard'); ?>';
                            }, 1500);
                        }
                        if(data['code']==100){
                            $('.loginerror').html(data['msg']).css('display','block');
                            $('.formvalid').html("Invalid username and password");
                        }
                    }
                });
            }
        });
    });

Я отправляю всю форму данных вместе с запросом ajax и я также добавил поле csrf_field. Пожалуйста, проверьте.

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Я предлагаю какое-то решение, что каждое из них может быть решением вашей проблемы:

1.Просмотрите в Inspect вашего браузера, что токен создан для скрытого ввода csrf или нет. Если этот вход имеет значение null введите токен вручную с помощью {{csrf_token}} в любом случае (например, с jquery при загрузке страницы).

2. В некоторых случаях работает {!! csrf_field() !!} вместо {{csrd_field()}}

3. Go на session.php в config folder и найдите domain и измените его на свое доменное имя.

4. Установите ['middleware' => ['web']] для своего маршрута.

Я надеюсь, что одно из этих решений вам подходит

0 голосов
/ 31 января 2020

Ваш код ajax в порядке, как вы сказали, он работает в локальной среде. На самом деле ваш сервер не постоянно кэширует / хранит новые файлы, сгенерированные как файл сеанса. Отсутствие постоянного сеанса означает отсутствие проверки csrf ...

Попробуйте использовать базу данных в качестве драйвера сеанса.

  1. Создайте таблицу для сеанса, используя php artisan session:table
  2. На вашем сервере изменение файла среды SESSION_DRIVER из файла в базу данных и настройка кэша на сервере. Если на сервере нет файла env, измените драйвер сеанса по умолчанию в config / session. php

Это сохранит информацию о сеансе в таблице базы данных, которую вы создали на шаге 1.

https://laravel.com/docs/5.8/session#driver - предпосылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...