Поле адреса электронной почты является обязательным, но в представлении Laravel нет входящего адреса электронной почты.

Я все время получаю это сообщение об ошибке:

  • Поле электронной почты является обязательным.

Но на мой взгляд, у меня нет типа ввода с именем электронной почты:

Авторизоваться

    <link rel="shortcut icon" href="{{ asset('img/logo.png') }}" type="image/x-icon">

    <link href="https://fonts.googleapis.com/css?family=Open+Sans:400,600,800" rel="stylesheet">
    <link rel="stylesheet" href="{{ asset('css/bootstrap.min.css') }}">
    <link rel="stylesheet" href="{{ asset('css/feather.css') }}">
    <link rel="stylesheet" type="text/css" href="{{ asset('css/style.css') }}">
    <link rel="stylesheet" href="{{ asset('css/jquery.mCustomScrollbar.css') }}">

</head>

<body>

    <section class="login-block">
        <div class="container">
            <div class="row">
                <div class="col-md-12">
                    <form action="/login" method="post" class="md-float-material form-material">
                        @csrf
                        <div class="auth-box card">
                            <div class="card-block">
                                <div class="row m-b-20">
                                    <div class="col-md-12">
                                        <h3 class="text-center">Members Management System</h3>
                                    </div>
                                </div>

                                @if ($errors)
                                <div class="alert alert-danger background-danger">
                                    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                                        <i class="icofont icofont-close-line-circled text-white"></i>
                                    </button>
                                    @foreach ($errors->all() as $error)
                                        - {{ $error }}
                                        <br>
                                    @endforeach
                                </div>
                                @endif

                                <div class="form-group form-primary">
                                    <input type="text" name="employee_id" class="form-control" required=""
                                        placeholder="Employee ID">
                                    <span class="form-bar"></span>
                                </div>
                                <div class="form-group form-primary">
                                    <input type="password" name="password" class="form-control" required=""
                                        placeholder="Password">
                                    <span class="form-bar"></span>
                                </div>
                                <div class="row m-t-30">
                                    <div class="col-md-12">
                                        <button type="submit"
                                            class="btn btn-primary btn-md btn-block waves-effect waves-light text-center m-b-20">
                                            SIGN IN
                                        </button>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </section>

    <script src="{{ asset('js/jquery.min.js') }}"></script>
    <script src="{{ asset('js/jquery-ui.min.js') }}"></script>
    <script src="{{ asset('js/script.js') }}"></script>

</body>

</html>

Я не понимаю, почему $errors сообщает мне об ошибке, связанной с электронной почтой. Какие-либо предложения? Я не менял никаких настроек AUTH по умолчанию из Laravel. Может показаться, что ошибка исходит из другого источника?

РЕДАКТИРОВАТЬ:

Спасибо за предложение переопределить username() в моем LoginController следующим образом:

public function username()
{
    return 'employee_id';
}

Это самый обычный и предпочтительный способ сделать это? Спасибо за помощь.


person KiritoLyn    schedule 11.04.2019    source источник
comment
По умолчанию laravel устанавливает адрес электронной почты и пароль как базовую аутентификацию, поэтому вам нужно переопределить его   -  person Vipertecpro    schedule 11.04.2019


Ответы (2)


AuthenticatesUsers отвечает за проверку данных после того, как пользователь отправил форму. Если вы посмотрите этот файл, вы увидите этот метод:

/**
 * Validate the user login request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return void
 */
protected function validateLogin(Request $request)
{
    $this->validate($request, [
        $this->username() => 'required|string',
        'password' => 'required|string',
    ]);
}

В частности, как вы можете видеть, этот метод отвечает за вызов валидатора в полях с именем «пароль» и с помощью метода username (). Если вы хотите настроить только поле имени пользователя, вы можете перезаписать метод username () в классе LoginController:

public function username()
{
    return 'employee_id';
}

Но поскольку вы хотите настроить как имя поля имени пользователя, так и имя поля пароля, я предлагаю вам перезаписать метод validateLogin () в классе LoginController:

protected function validateLogin(Request $request)
{
    $this->validate($request, [
        'employee_id' => 'required|string',
        'user_password' => 'required|string',
    ]);
}

Надеюсь, это поможет.

person Sethu    schedule 11.04.2019
comment
Значит, это означает, что мне просто нужно выполнить перезапись в LoginController, а не в самом файле AuthenticateUsers? - person KiritoLyn; 11.04.2019
comment
да, нужно просто перезаписать на LoginController - person Sethu; 11.04.2019
comment
это сработало, когда я сделал public function username() { return "employee_id"; } в своем LoginController - person KiritoLyn; 11.04.2019
comment
Да, это то, что я предложил в своем ответе :) и я рад, что у вас есть решение - person Sethu; 12.04.2019

Вы можете ссылаться на employee_id, как на username, при входе в систему. Теперь откройте LoginController и добавьте метод username().

public function username() { return "username"; }

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

person Benjamin Beganović    schedule 11.04.2019
comment
подождите, это return "username" или return "emplyee_id"? - person KiritoLyn; 11.04.2019
comment
Вы должны дать своим пользователям / сотрудникам имена пользователей и использовать username, а не employee_id :) - person Benjamin Beganović; 11.04.2019