Laravel 5.5 电子邮件和密码字段是必需的

Laravel 5.5 The email and password field is required

我是新手并已安装 Laravel 5.5,正在尝试使用登录功能。我正在使用自定义字段登录; user_name 和 user_password。当我提交时,我得到

但是我的字段在用户 table

中是 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>

您必须前往 app/User.php 并更改

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

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

它将解决您的问题。但我必须建议您将视图表单字段更改为电子邮件、密码而不是 user_name、user_password

您正在使用特征 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',
    ]);
}

更具体地说,如您所见,此方法负责在字段名称 "password" 上通过方法 username() 调用验证程序。如果只想自定义用户名字段,可以覆盖 LoginController class:

中的 username() 方法
public function username()
{
    return 'user_name';
}

但是既然你想自定义用户名字段名和密码字段名,我建议你覆盖LoginController中的validateLogin()方法 class:

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

希望对您有所帮助。