метод входа не работает после некоторых изменений - PullRequest
0 голосов
/ 30 сентября 2019

Как я должен изменить логику входа в систему, чтобы рассматривать «мобильное» поле вместо «электронной почты», используя Laravel 5.8 ?

Я изменил поле email на mobile , но метод входа в систему (регистрация в порядке) всегда возвращает ложный ответ.

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


namespace App;


use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;


class User extends Authenticatable
{
    use Notifiable;


    protected $fillable = array('first_name', 'last_name', 'profile_image', 'mobile', 'mobile_verified_at', 'email', 'email_verified_at', 'province_id', 'city_id', 'zone_id', 'status', 'wallet', 'offer_code', 'offer_percent', 'job', 'password');


    protected $hidden = [
        'password', 'remember_token','role_id'
    ];

    protected $username = 'mobile';


    protected $casts = [
        'email_verified_at' => 'datetime',
    ];


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

    public function setPasswordAttribute($value)
    {
        $this->attributes['password'] = \Hash::make($value);
    }



}

LoginController:


namespace App\Http\Controllers\Auth;

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

class LoginController extends Controller
{


    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');
    }

    /**
     * Validate the user login request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return void
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    protected function validateLogin(Request $request)
    {
        $request->validate([
            'mobile'    => 'required|exists:users,mobile',
            'password'  => 'required|min:3',
            'captcha'   => 'required|captcha'
        ]);

    }

}


Вид входа в систему:

{{--@extends('layouts.app')--}}
@extends('site::layout.template')

@section('content')

    <div class="row justify-content-center">

        <!-- Sidebar -->
        <div class="col-md-6">
            <div class="card">

                <!-- Card header-->
                <div class="card-header max">
                    <h3>Login</h3>
                </div>
                <div class="card-body">

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

                    <div class="row justify-content-center">
                        <div class="col-md-8">

                            <form method="POST" action="{{ route('login') }}">
                                @csrf
                                <div class="form-group row">
                                    <div class="col-md-12">
                                        <label>Mobile</label>
                                        <input type="text" name="mobile" class="form-control form-shadow @error('mobile') is-invalid @enderror" value="{{ old('mobile') }}"  placeholder="09121234567" >
                                        @error('mobile')
                                        <span class="invalid-feedback" role="alert">
                                            <strong>{{ $message }}</strong>
                                        </span>
                                        @enderror
                                    </div>
                                </div>

                                <div class="form-group row">
                                    <div class="col-md-12">
                                        <label>Password</label>
                                        <input type="password" name="password" class="form-control form-shadow @error('password') is-invalid @enderror" placeholder="*********" >
                                        @error('password')
                                            <span class="invalid-feedback" role="alert">
                                            <strong>{{ $message }}</strong>
                                        </span>
                                        @enderror
                                    </div>
                                </div>


                                <div class="form-group row">
                                    <div class="col-md-12">
                                        <div class="form-check">
                                            <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
                                            <label class="form-check-label" for="remember">
                                                Remember me
                                            </label>
                                        </div>
                                    </div>
                                </div>




                                <div class="form-group row">
                                    <div class="col-md-8">
                                        <input type="text" class="form-control form-shadow @error('captcha') is-invalid @enderror" name="captcha" placeholder="enter front code" >
                                        @error('captcha')
                                            <span class="invalid-feedback" role="alert">
                                            <strong>{{ $message }}</strong>
                                        </span>
                                        @enderror
                                    </div>
                                    <div class="col-md-4">
                                        <img  id="refresh" class="captcha" src="{!! captcha_src('flat') !!}" alt="">
                                    </div>

                                </div>

                                <div class="form-group row">
                                    <button class="btn btn-primary btn-lg btn-block">ورود</button>
                                </div>
                                @if (Route::has('password.request'))
                                    <a class="btn btn-link" href="{{ route('password.request') }}">
                                      Reset password ?
                                    </a>
                                @endif

                            </form>
                        </div>
                    </div>
                </div>

            </div>
        </div>

    </div>

@endsection


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

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Вы должны взглянуть на официальную документацию .

Настройка имени пользователя

По умолчанию Laravel использует поле электронной почты для аутентификации. Если вы хотите> настроить это, вы можете определить метод имени пользователя на вашем LoginController:

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

Итак, в вашем случае вам нужно добавить эту функцию в ваш LoginController и изменить username на мобильный:

namespace App\Http\Controllers\Auth;

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

class LoginController extends Controller
{


    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 'mobile';
    }

    /**
     * Validate the user login request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return void
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    protected function validateLogin(Request $request)
    {
        $request->validate([
            'mobile'    => 'required|exists:users,mobile',
            'password'  => 'required|min:3',
            'captcha'   => 'required|captcha'
        ]);

    }

}

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

0 голосов
/ 30 сентября 2019

в Auth / LoginController просто добавьте функцию username ()

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

и замените адрес электронной почты тем, что вы хотите.

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