логин с электронной почтой или телефоном в laravel 6 не работает

Я хочу войти в систему с помощью электронной почты или номера телефона в laravel auth. Я пишу эти коды, но он возвращает мне email field is required

в User.php

protected $fillable = ['name', 'email', 'password', 'phone'];

в контроллере входа в систему

public function phone()
{
    $loginType = request()->input('phone');
    $this->phone = filter_var($loginType, FILTER_VALIDATE_EMAIL) ? 'email' : 'phone';
    request()->merge([$this->phone => $loginType]);

    return property_exists($this, 'phone') ? $this->phone : 'email';
}

login.blade.php

<div class="js-form-message form-group">
    <label class="form-label" for="phone">Email address or Phone
        <span class="text-danger">*</span>
    </label>
    <input type="text"
           class="form-control{{ $errors->has('email') || $errors->has('phone') ? ' is-invalid' : '' }}"
           name="phone"
           id="phone"
           placeholder="Email or Phone"
           value="{{ old('phone') }}">
    @error('email')
    <div class="invalid-feedback" style="display: block">
        {{ $message }}
    </div>
    @enderror
    @error('phone')
    <div class="invalid-feedback" style="display: block">
        {{ $message }}
    </div>
    @enderror
</div>

Что мне теперь делать? не могли бы вы помочь?


person tariqul anik    schedule 03.08.2020    source источник


Ответы (2)


Единственное, что вам нужно сделать, это указать Laravel, по какому столбцу проверять:

Переопределите этот метод в вашем контроллере входа в систему:

public function username()
{
    return request()->filled('phone') ? 'phone' : 'email';
}
person jewishmoses    schedule 03.08.2020

Изменено имя метода phone () на username ().

public function username()
{
    $loginType = request()->input('phone');
    $this->phone = filter_var($loginType, FILTER_VALIDATE_EMAIL) ? 'email' : 'phone';
    request()->merge([$this->phone => $loginType]);

    return property_exists($this, 'phone') ? $this->phone : 'email';
}

это сработало для меня сейчас. спасибо всем за ваш ответ.

person tariqul anik    schedule 03.08.2020