Laravel авторизация/регистрация только по телефону. Как починить валидацию и вывод ошибок?

Для осуществления авторизации и регистрации только по телефону в Laravel, вам понадобится изменить стандартную логику аутентификации и создать свои собственные правила валидации.

Во-первых, необходимо настроить маршруты для авторизации и регистрации в файле routes/web.php. Вы можете использовать стандартный контроллер аутентификации AuthLoginController для авторизации по телефону, и контроллер AuthRegisterController для регистрации по телефону.

Пример маршрутов для авторизации:

Route::post('login', 'AuthLoginController@login');

Пример маршрутов для регистрации:

Route::post('register', 'AuthRegisterController@register');

Во-вторых, вам потребуется определить свои правила валидации для полей авторизации и регистрации по телефону в соответствующих контроллерах. Например, если вам нужно, чтобы номер телефона содержал только цифры и имел длину в 10 символов, вы можете использовать правило digits:10 в Laravel.

Пример валидации для авторизации:

protected function validateLogin(Request $request)
{
    $request->validate([
        'phone' => 'required|digits:10',
        'password' => 'required|string',
    ], $this->validationErrorMessages());
}

Пример валидации для регистрации:

protected function validateRegister(Request $request)
{
    $request->validate([
        'phone' => 'required|unique:users|digits:10',
        'password' => 'required|string|min:6|confirmed',
    ], $this->validationErrorMessages());
}

Важно помнить, что вы также должны настроить вашу базу данных и модель пользователя (обычно User) для использования номера телефона вместо почтового адреса при аутентификации.

Также не забудьте настроить сообщения об ошибках для каждого правила валидации. Вы можете определить их в методе validationErrorMessages() в каждом контроллере.

protected function validationErrorMessages()
{
    return [
        'phone.required' => 'Поле телефон обязательно для заполнения.',
        'phone.digits' => 'Телефон должен содержать 10 цифр.',
        // другие правила и сообщения об ошибках
    ];
}

Наконец, убедитесь, что вы отображаете ошибки в представлениях авторизации и регистрации. Для этого обычно используются шаблоны представлений в папке resources/views/auth

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

Данный код выведет все ошибки в случае их наличия.

В итоге, чтобы починить валидацию и вывод ошибок при авторизации и регистрации только по телефону в Laravel, вам нужно настроить маршруты, контроллеры, правила валидации, представления, и убедиться, что ваша база данных и модель пользователя поддерживают номер телефона.