Laravel 5.5 Поле электронной почты и пароля обязательно

Я новичок, установил Laravel 5.5 и пытаюсь работать над функцией входа в систему. Я использую настраиваемые поля для входа в систему; имя_пользователя и пароль_пользователя. Когда я отправляю, я получаю

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

но мои поля user_name и user_password в пользовательской таблице

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

namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Session;

class LoginController extends Controller
{


use AuthenticatesUsers;


protected $redirectAfterLogout = '/';

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

/**
 * Logout, Clear Session, and Return.
 *
 * @return void
 */
public function logout()
{
    $user = Auth::user();
    Log::info('User Logged Out. ', [$user]);
    Auth::logout();
    Session::flush();

    return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
}

protected function getCredentials(Request $request){
    return $request->only('user_name', 'user_password');
}


}

Вид

@extends('layouts.app')

@section('content')
<div class="container">
<div>
  <a class="hiddenanchor" id="signup"></a>
  <a class="hiddenanchor" id="signin"></a>
  <div class="login_wrapper">
    <div class="animate form login_form">
      <section class="login_content">
        <form class="form-horizontal" role="form" method="POST" action="{{ route('login') }}">
          {{ csrf_field() }}
          <h1>Login Form</h1>
          <div>
            <input id="email" type="email" class="form-control" name="user_name" value="{{ old('user_name') }}" required autofocus>
          </div>
          <div>
            <input id="password" type="password" class="form-control" name="user_password" required>
          </div>
          <div>
            <button type="submit" name="login" class="btn btn-default submit">Log in</button>
            <a class="reset_pass" href="#">Lost your password?</a>
          </div>

          <div class="clearfix"></div>
          <div class="separator"></div>
        </form>
      </section>
    </div>
 </div>
</div>

person user8689892    schedule 05.10.2017    source источник


Ответы (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 'user_name';
}

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

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

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

person louisfischer    schedule 05.10.2017
comment
Я пробовал переопределить validateLogin только в моем LoginController, но все равно получаю те же ошибки. - person user8689892; 05.10.2017
comment
скорее получаю "Type error: Argument 1 passed to App\Http\Controllers\Auth\LoginController::validateLogin() must be an instance of App\Http\Controllers\Auth\Request, instance of Illuminate\Http\Request given, called in E:\xampp\htdocs\laravelAuth\vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php on line 31 ◀" ошибку - person user8689892; 05.10.2017
comment
При входе в систему Эти учетные данные не соответствуют нашим записям возникает ошибка. Я знаю, что Laravel использует bycrpt для пароля; Я также преобразовал свой пароль. Я что-то упускаю? - person user8689892; 05.10.2017
comment
Это немного расплывчато. Можете ли вы предоставить больше информации? Кроме того, вам, вероятно, следует опубликовать новый вопрос по этой проблеме. - person louisfischer; 05.10.2017

Вы должны перейти в app/User.php и изменить

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

to

protected $fillable = [
    'name', 'user_email', 'user_password',
];

Это решит вашу проблему. Но я должен предложить вам изменить поле формы просмотра на адрес электронной почты, пароль вместо имени_пользователя, пароль_пользователя.

person M Arfan    schedule 05.10.2017
comment
Я думаю, что вы смешиваете вещи здесь. Переменная-член $fillable определяет атрибуты, которые можно назначать массово (массовое назначение). . Имена полей формы в HTML и имена столбцов таблицы полностью независимы. - person louisfischer; 05.10.2017