Laravel 6 - войдите с телефона или электронной почты - PullRequest
0 голосов
/ 25 января 2020

Я использую Laravel 6 и хочу, чтобы пользователь мог альтернативно войти по электронной почте или по мобильному телефону.

Мои попытки на данный момент:

  • Миграция работает нормально.
  • Регистрация работает нормально

Вход в систему работает отлично по одному: электронная почта или мобильный со следующими изменениями в loginController. php.

public function username()
{
    return 'mobile'; // or email
}

, а также login.blade. php для HTML форм с электронной почты на мобильный телефон.

Я пытался проверить оба электронная почта и телефон по директиве @ error , например @error ('email') || @error ('mobile') недействителен @enderror, но после отправки не предпринимает никаких действий. Ниже приведен пример

<input id="user_login" type="text" class="form-control @error('email') || @error('mobile') is-invalid @enderror" name="user_login" value="{{ old('user_login') }}" required autocomplete="user_login" autofocus>

                            @error('user_login')
                                <span class="invalid-feedback" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                            @enderror

Ваша помощь будет оценена.

Ответы [ 2 ]

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

Предоставленный шаблон блэйда содержит неверный синтаксис блэйда, который преобразуется в недопустимый php (|| преобразуется в обычный текст вместо операции OR).

Извлечение полученного php ниже: incorrect php

Это можно исправить, дважды используя @error и enderror:

<form action="{{ route('test.store') }}" method="post">
    <input id="user_login" type="text" class="form-control @error('email') is-invalid @enderror @error('mobile') is-invalid @enderror" name="user_login" value="{{ old('user_login') }}" required autocomplete="user_login" autofocus>

    @error('user_login')

Чтобы добавить дополнительное поле для аутентификации, можно использовать следующее:

resources / auth / login.blade. php

   <form method="POST" action="{{ route('login') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="phone" class="col-md-4 col-form-label text-md-right">{{ __('Phone') }}</label>

                            <div class="col-md-6">
                                <input id="phone" type="text" class="form-control @error('phone') is-invalid @enderror" name="email" value="{{ old('phone') }}" required autocomplete="email" autofocus>

                                @error('phone')
                                <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" autocomplete="email" autofocus>

                                @error('email')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

app / Http / Auth / LoginController. php

Переопределение метода username() для использования телефона при наличии и отправки по электронной почте в качестве запасного.

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    public function username()
    {
        return request()->has('phone') ? 'phone' : 'email';
    }
}

или с одним полем:

  <div class="form-group row">
                            <label for="user_identifier" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address/Phone') }}</label>

                            <div class="col-md-6">
                                <input id="user_identifier" type="text" class="form-control @error('user_identifier') is-invalid @enderror" name="user_identifier" value="{{ old('user_identifier') }}" autofocus>

                                @error('user_identifier')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

и связанный метод LoginController:

    public function username()
    {
        $identifier = request()->get('user_identifier');

        if(filter_var($identifier, FILTER_VALIDATE_EMAIL)){
            return 'email';
        }

        return 'phone';
    }
0 голосов
/ 25 января 2020

изменить Миграция пользователя:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->string('username')->unique()->nullable();
        $table->string('mobile_number')->unique()->nullable();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}

изменить Модель пользователя:

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

в app\Http\Controllers\Auth\RegisterController.php изменить:

protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'mobile_number' => $data['mobile_number'],
        'password' => Hash::make($data['password']),
    ]);
}

затем изменить свой регистр и войти просмотров и добавьте поле, чтобы получить mobile_number

...