Laravel 5.7: исправлена ​​ошибка, при которой вход в систему не работал с ajax - PullRequest
0 голосов
/ 25 июня 2019

Я использую laravel 5.7 и сталкиваюсь с некоторыми проблемами при входе в систему с использованием ajax.

Я пробовал много других подобных вопросов, но не смог найти решение.

Вот шаги, за которыми я следую.

Открыть модал для начальной загрузки Заполнить учетные данные Отправьте форму, используя ajax и верните false в случае ошибки или true в случае успешного входа Если возвращено значение true, перенаправить на другую страницу

Но на другой странице я получаю ошибку Trying to get property of non-object для Auth::user()->id

Вот что я пытаюсь сделать.

Вид:

<form id="login_form" >
    @csrf
    <div class="form-group">
        <label for="emailaddress">{{ __('lang.email_address') }}</label>
        <input class="form-control" type="email" id="emailaddress" name="email" required="">
        <span class="ajax-error email"></span>
    </div>
    <div class="form-group">
        <label for="password">{{ __('lang.password') }}</label>
        <input class="form-control" type="password" required="" id="password" name="password" placeholder="">
        <span class="ajax-error password"></span>
    </div>
    <div class="form-group">
        <div class="row">
            <div class="col-md-6">
                <div class="custom-checkbox">
                    <input type="checkbox" id="css"> <label for="css">{{ __('lang.remember_me') }}</label>
                </div>
            </div>
            <div class="col-md-6">
                <div class="forgot">
                    <a href="{{url('/admin/forget-password')}}" class="pull-right">{{ __('lang.forgot_your_password') }}</a>
                </div>
            </div>
        </div>
    </div>
    <div class="form-group row text-center m-t-10">
        <div class="col-md-12">
            <a id="login-btn" type="submit" class="btn btn-warning btn-login btn-block login_button">{{ __('lang.login') }}</a>
        </div>
    </div>
    <a href="#" class="btn btn-block btn-facebook m-b-10"> <i
        class="fab fa-facebook"></i> <span>{{ __('lang.login_with_facebook') }}</span>
    </a> <a href="#" class="btn btn-block btn-google m-b-10"> <i
        class="fab fa-google-plus"></i> <span>{{ __('lang.login_with_google') }}</span>
    </a>
</form>

JQuery:

$('.login_button').click(function(){
    $.ajax({
        method: "POST",
        url: "{{url('/user/login')}}",
        data: $('#login_form').serialize()
    })
    .done(function( msg ) {
        var res = JSON.parse(msg);
        if(res.validation) {
            var error = res.validation;
            $.each(error, function( index, value ) {
                value = value + '';
                var array = value.split(",");
                $('.'+index).show();
                $('.'+index).text(array[0]);
            });
        }else if(res.error) {
            alert(res.error);
        } else if(res.status) {
            $('#login_form').hide();
            window.location = "{{ Url::to('admin/dashboard') }}";
        }
    });
});

Контроллер:

public function login(Request $request)
{
    $data = [];
    $rules = array(
        'email'=>'required|email',
        'password' => 'required'
    );
    $post = $request->all();
    $validator = Validator::make($post, $rules);
    if ($validator->fails()) {
        $data['validation'] = $validator->errors();
    }else{
        $credentials = $request->only('email', 'password');
        if (Auth::attempt($credentials)) {
            if (Auth::check()) {
                $data['status'] = true;
                $data['message'] =  trans('lang.login_success'); 
                $data['role'] = Auth::user()->role_id;
            }
        }else{
            $data['error'] =  trans('lang.user_invalid');
        }
    }
    echo json_encode($data);
}

1 Ответ

0 голосов
/ 25 июня 2019

этот код работает нормально, все, что вам нужно сделать, это добавить, запретить отправку формы по умолчанию.

$('.login_button').click(function (e) {
    e.preventDefault();
    $.ajax({

внесите это незначительное изменение в ваш код, и вам будет хорошо.

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